1.默认构造函数:由编译器自动生成或者自己指定也行,原则上最好自己主动提供一个显式默认构造函数用于将所有的数据成员都初始化为合理值;
2.复制构造函数使用情景:
将新对象初始化为一个同类对象
按值将对象传递给函数
函数按值返回对象
编译器生成临时对象
编译器自动生成复制构造函数,但当需要深度复制如new初始化、类可能包含需要修改的静态变量时,需自己重写复制构造函数;
3.赋值运算符:
默认的赋值运算符用于处理同类对象之间的赋值,注意区分赋值与初始化,如果语句创建新对象则使用初始化,如果语句修改已有对象则是赋值。如下图,(注意:只要自己编写复制构造函数则同时需要自己编写赋值运算符)
初始化与赋值
4.析构函数,对于基类即使不需要析构函数也要提供一个虚析构函数(虚保证调用顺序:先派生后基类)
5.转换函数:将类类型转换为其他类型如基本类型
区别:
1)将其他类型转换为类对象使用构造函数即可
2)explicit:只能进行显式转换
6.编写使用对象作为参数的函数时,应按引用而不是按值传递对象;
7.函数应返回引用而不是返回对象,但如果函数返回在函数中创建的临时对象,则不使用引用,如果函数返回的是通过引用或指针传递给它的对象,则应按引用返回对象;
8.构造函数和析构函数、赋值运算符均不能被继承,派生类得自己编写;
9.复制构造函数和赋值运算符
10.虚方法(多态)
如果希望派生类能够重新定义方法,则在基类中要定义为虚的
11.基类必有虚析构函数
12、友元函数不属类成员,因此不能继承,如果希望派生类的友元函数能够使用基类的友元函数,可通过强制类型转换符将派生类引用或指针转换为基类引用或指针,然后使用转换后的指针或引用调用基类友元函数;
13、把派生类引用强制转换为基类类型后,转换后的类型除了可以调用基类内容以外,仍可以代表派生类去调用派生类的内容;








网友评论