之前的笔记搬运
构造函数
C++构造函数的作用, 就是在实例化对象的时候, 自动调用构造函数, 用于初始化
构造函数定义:
1 | class test |
构造函数特性:
没有返回值
可以重载 (用于传递不同参数, 进行不同的初始化操作)
不可显示调用 (不可以通过实例化对象, 或者类的作用域来调用该函数)
一般用于初始化函数内部的一些成员变量, 或者其他操作
构造函数可以使用参数
如果没有写构造函数的话, 默认是不进行初始化操作的
复制构造函数
C++默认复制构造函数, 就是使用memcpy函数, 把一整块内存拷贝到另一块内存去,
这时就会有问题出现, 如果类成员有指针类型的话, 那么这两个对象访问该成员时,
则会访问到相同一个内存空间里, 这时需要我们手动编写一个复制构造函数来避免这个问题
构造函数定义:
1 | class test |
析构函数
C++默认析构函数的作用: 在执行出类的作用域时, 会自动调用析构函数,
一般用于释放资源
析构函数定义:
1 | class test |
析构函数特性:
没有返回值
不可以被重载 (因为函数名就这一个, 没有参数, 没法被重载)
可以显示调用 (可以利用对象来调用这个函数, 在指定的地方析构这个函数)
一般用于释放内部申请的资源
静态类数据成员和成员函数
把类中的函数都定义成静态函数,这样相当于在编译时就分配了空间,这样不需要实体对象也可以调用泪中的函数了,
成员也一样;
也就是相当于申请了全局变量和函数, 只不过加上了类的作用域和公私属性
声明为static的类成员或者成员函数便能在类的范围内共同享,我们把这样的成员称做静态成员和静态成员函数。
定义格式:
1 | class test |
New
格式:
int *p = new int; //申请变量
int *p1 = new int[3]; //申请数组
new和C语言中的 malloc 函数一样, 都是用于动态申请空间的;
但是需要注意的是, 使用new动态申请一个类的对象的时候, 会自动调用构造函数,
而且malloc不会, 所以在C++中最好使用new来申请空间
当new的动态空间是一个数组的时候, 传入new的 需要申请空间大小
这个参数会增加4个字节, 用于存放的数组的成员数, 如果申请的是一个类对象,
那么会依次调用构造函数
Delete
格式:
delete p; //释放上面申请的变量
delete[] p1; //释放上面申请的数组
delete和C语言中的 free 函数一样, 都是用于释放申请的动态空间的;
同理, 使用delete释放一个类的对象动态空间时, 会自动调用析构函数, 而free函数则不会
当delete需要释放一个数组空间时, 需要加上[] 表示释放的一个内存空间是数组,
会根据new空间时, 记录的数组成员数, 来决定释放次数, 如果释放的是一个类对象,
那么也会依次调用析构函数