C++学习日记1

    xiaoxiao2026-04-24  5

    1. shared_ptr

    解析:shared_ptr是一种计数指针,当引用计数变为0时,shared_ptr所指向的对象将会被删除。如下所示:

    void test() { shared_ptr p1(new int); // 计数为1 { shared_ptr p2(p1); // 计数为2 { shared_ptr p2(p1); // 计数为3 } // 计数为2 } // 计数为1 } // 计数为0,同时int对象被删除

    2. unique_ptr

    解析:unique_ptr是定义在<memory>中的智能指针(smart pointer)。它持有对对象的独有权,即两个unique_ptr不能指向一个对象,不能进行复制操作只能进行移动操作。

    3. const类成员函数

    解析:const类成员函数不能修改任何成员变量,但是mutable修饰的变量除外。

    说明:const int *p与int const *p没有区别;const int *p; [p可以修改,但是p指向对象的内容不可修改];int * const p; [p不可修改,但是p指向对象的内容可以修改]。

     

    4. 拷贝构造函数

    解析:拷贝构造函数是一种特殊的构造函数,函数的名称必须和类名称一致,它必须的一个参数是本类型的一个引用变量。在C++中,三种对象需要调用拷贝构造函数的情况,如下所示:

    (1)对象以值传递的方式传入函数参数。

    (2)对象以值传递的方式从函数返回。

    (3)对象需要通过另外一个对象进行初始化。

    浅拷贝指的是在对象复制时,只对对象中的数据成员进行简单的赋值,默认拷贝构造函数执行的是浅拷贝。大多情况下“浅拷贝”都能很好地工作,但是一旦对象存在了动态成员,那么浅拷贝就会出现问题。

    5. 《C++标准程序库》

    解析:

    (1)第1章至第4章总体介绍了本书及C++标准程序库;

    (2)第5章至第9章分别从各个方面描述STL;

    (3)第10章至第12章描述了一些“简单的”标准类别;

    (4)第13章至第14章的主题是I/O和国际化;

    (5)第15章描述C++标准程序库中内存模型的概念。

    (6)附录主要是参考资料。

    6. 模板类ostream_iterator

    解析:template <class T, class charT=char, class traits=char_traits<charT> > class ostream_iterator;

    举个例子,如下所示:

    // ostream_iterator example #include <iostream> // std::cout #include <iterator> // std::ostream_iterator #include <vector> // std::vector #include <algorithm> // std::copy int main () { std::vector<int> myvector; for (int i=1; i<10; ++i) myvector.push_back(i*10); std::ostream_iterator<int> out_it (std::cout,", "); std::copy ( myvector.begin(), myvector.end(), out_it ); return 0; }

    7. int* p和int *p区别

    解析:没有区别,只不过int* p强调类型是int指针,而int *p强调对象是int指针。

    8. extern语法

    解析:

    (1)extern修饰变量的声明 比如,extern int i。 (2)extern修饰函数的声明 比如,extern int fun(int i)。 (3)extern修饰C/C++函数的调用规范 比如,在C++中调用C库函数,需要在C++中用extern "C"声明要引用的函数。

    9. #pragma once

    解析:#pragma once是一个比较常用的C/C++杂注,只要在头文件的最开始加入这条杂注,就能够保证头文件只被编译一次。需要注意的是这种方式是微软编译器独有的,并且不支持跨平台。如果需要支持跨平台,那么需要使用#ifndef/#define/#endif。 

    10. C++中的Virtual关键字

    解析:

    (1)virtual ReturnType Function_1(); //虚函数声明 (2)virtual ReturnType Function_2() = 0; //纯虚函数声明

    说明:包含纯虚函数的类被称为抽象基类。

    11. C++关键字

    解析:

    12. wchar_t(宽字符类型,双字节类型)

    解析:wchar_t的本质是typedef unsigned short wchar_t;(重点理解char,wchar_t,string,wstring类型之间的相互转换)。

    说明:wstring是宽char,Unicode编码,一个字符占两个字节大小;而string是窄char,ASCII编码,一个字符占一个字节大小。

    说明:short int(2个字节);long int(4个字节);long double(8个字节)。要学会使用sizeof(wchar_t)查看数据类型的字节大小。

    13. C++中的左值和右值

    解析:

    (1)左值(lvalue):指向内存位置的表达式被称为左值(lvalue)表达式。左值可以出现在赋值号的左边或右边。 (2)右值(rvalue):指的是存储在内存中某些地址的数值。右值可以出现在赋值号的右边,但不能出现在赋值号的左边。

    14. C++全局变量初始值

    解析:

    (1)int:0 (2)char:'\0' (3)float:0 (4)double:0 (5)pointer:NULL

    说明:当定义局部变量时,系统不会对其进行初始化,你必须自行对其进行初始化。

    15. C++内存区域划分

    解析:

    (1)栈:由编译器自动分配和释放,通过存储的变量是局部变量、函数参数等。

    (2)堆:由new分配的内存块,通常一个new对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。

    (3)自由存储区:由malloc等分配的内存块,用free释放掉内存块。

    (4)全局/静态存储区:全局变量和静态变量共同占用同一块内存区。

    (5)常量存储区:存储常量,不能修改。   

    16. C++类型限定符

    (1)const:const类型的对象在程序执行期间不能被修改改变。

    (2)volatile:修饰符volatile告诉编译器不对代码进行任何优化。

    (3)restrict:restrict修饰的指针是能够访问所指区域的唯一入口。(C99新增)

    17. C++存储类

    解析:

    (1)auto存储类:所有局部变量默认的存储类。

    (2)register存储类:定义存储在寄存器中而不是RAM中的局部变量。

    (3)static存储类:局部变量;全局变量;类数据成员变量。

    (4)extern存储类:提供一个全局变量的引用,全局变量对所有的程序文件都是可见的。

    (5)mutable存储类:如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的。如果需要在const的函数里面修改一些跟类状态无关的数据成员,那么这个数据成员就应该被mutalbe来修饰。

    18. C++字符串

    解析:

    (1)C风格字符串:头文件#include <cstring>,常用的函数包括strcpy(s1, s2);strcat(s1, s2);strlen(s1);strcmp(s1, s2);strchr(s1, ch);strstr(s1, s2)。

    (2)C++风格字符串:头文件#include <string>。

    说明:C++运算符:算术运算符;关系运算符;逻辑运算符;位运算符;赋值运算符;杂项运算符。

    19. C++继承与权限

    解析:

    (1)public => public继承 => public。 (2)public => protected继承 => protected。    (3)public => private继承 => private。 (4)protected => public继承 => protected。 (5)protected => protected继承 => protected。    (6)protected => private继承 => private。 (7)private => public继承 => 子类无权访问。 (8)private => protected继承 => 子类无权访问。 (9)private => private继承 => 子类无权访问。

    说明:成员和类的默认访问修饰符是private。

    20. 友元函数和友元类

    解析:

    (1)友元函数 类的友元函数可以访问类的所有私有(private)成员和保护(protected)成员,但是友元函数并不是类的成员函数。比如, friend void printWidth( Box box ); (2)友元类 友元类及其所有成员都是友元。比如friend class ClassTwo;

    21. stringstream

    标准头文件<sstream>定义了一个叫做stringstream的类,可以进行字符串与数值之间的相互转换。如下所示:

    string mystr ("1204"); int myint; stringstream(mystr) >> myint;

    说明:命令执行完毕后,变量myint存储的数值为1204。

    22. 字符串和其它数据类型的转换

    解析:

    函数库cstdlib提供了3个有用的函数。如下所示: (1)atoi: 将字符串string转换为整型int。 (2)atol: 将字符串string转换为长整型long。 (3)atof: 将字符串string转换为浮点型float。

    23. ANSI-C中的动态内存管理

    解析: 

    (1)malloc函数:void *malloc(unsigned int num_bytes):动态申请size个字节的内存空间。 (2)calloc函数:void *calloc(unsigned n, unsigned size):用于向系统动态申请n个,每个占size个字节的内存空间,并把分配的内存全都初始化为零。 (3)realloc函数:void *realloc(void *p, unsigned size):将指针p所指向的已分配内存区的大小改为size。 (4)free函数:void free(void *p):释放指针p所指向的内存空间。

    24. const char * what() const throw()

    解析:const throw()是异常规格说明,它表示what()可以抛出异常的类型,类型说明放到()里面,比如throw(int)。如果里面没有类型,那么表示这个函数不抛出任何异常。通常函数后面不写throw()表示该函数可以抛出任何类型的异常。

    25. C++多线程编程

    解析:

    (1)Linux下常用#include <pthread.h>,对应的Windows版本为POSIX Threads for Win32。

    (2)C++准标准库中的#include <boost/thread.hpp>。

    (3)C++11标准库中的#include <thread>。

    (4)Win32多线程中的#include <windows.h>和#include <process.h>。

    参考文献:

    [1] cplusplus:http://www.cplusplus.com/

    [2] C++的const类成员函数:http://blog.csdn.net/lihao21/article/details/8634876

    [3] C++拷贝构造函数详解:http://blog.csdn.net/lwbeyond/article/details/6202256

    转载请注明原文地址: https://ju.6miu.com/read-1309168.html
    最新回复(0)