✳21.拷贝构造函数
①定义格式:类名(const 类名 & 变量名)
②如果没有自定义的拷贝构造函数则系统自动生成一个默认的拷贝构造函数。
③当采用直接初始化或复制初始化实例化对象时系统自动调用拷贝构造函数。
✳22.深拷贝与浅拷贝
①浅拷贝只是将数据成员的值进行了拷贝
②深拷贝不是简单的值拷贝,而是将指针成员指向的内存数据也进行拷贝。
③当数据成员中含有指针时,浅拷贝会使两个对象的成员指针指向相同的内存地址。
✳23.析构函数
①定义格式:~类名()
②如果没有自定义的析构函数,则系统自动生成
③析构函数在对象销毁时,自动调用
④析构函数没有返回值,没有参数也不能重载
⑤通过一个析构函数调用虚函数时,C++系统对该调用采用静态联编。
✳24.this指针
①this 指针无需用户定义,是编译器自动产生的。
②在成员函数的参数或临时变量与数据通信成员同名时,可以使用 this 指针区 分同名的数据成员。
③this 指针也是指针类型,所以在 32 位编译器下也占用 4 个基本的内存单元, 即 sizeof(this)的结果为 4。
④对象各自的this指针指向各自对象的首地址,所以不同对象的this指针一定指向不同的内存地址。
⑤静态成员函数没有this指针。
25.两种常指针解析
①指向对象的常指针
指向对象的常指针变量的值不能被改变,即始终指向同一个对象,但可以改变其所指向对象中的数据成员(非const型)的值。一般形式为:
类名 * const 指针变量 = 对象地址;
Time t1(10,12,15),t2;
Time * const ptr1 = &t1;
ptr1 = &t2; //
②指向常对象的指针
如果声明一个对象为常对象,则只能用指向常对象的指针指向它,而不能用一般的(非const型的)指针变量指向它。一般形式为:
const 类名 * 指针 = 对象地址;
const int a; //定义常变量a
const int *p = &a; //定义指向常变量的指针
26.常对象与普通对象
①常对象只能调用常成员函数,不能调用普通成员函数。
②普通对象能够调用常成员函数,也能够调用普通成员函数。
③常指针和常引用都只能调用对象的常成员函数。
④一个对象可以有多个对象常引用。
27.函数模板
提要:
例:int max(int a,int b){return (a>b)?a:b;}
float max(float a,float b){return (a>b)?a:b;}
①函数模板的参数个数可以是一个也可以是多个。
②使用函数模板时,需要指定模板参数,此时的函数称为模板函数。
③当需要定义多个功能相同,数据类型不同的函数时,可以使用函数模板来定义。(比如例子)
④函数模板参数不可以为0,如果为0,则没有必要引入函数模板。
⑤关键字:template、typename、class。
28.类模板
①定义一个类模板就相当于定义了一系列功能相同类型不同的类。
②定义类模板需要使用关键字 template。
③模板参数既可以是类型,也可以是变量。
④定义类模板的参数可以使用 typename 和 class,可以混用。