复制构造函数,赋值操作符,系够函数总称复制控制
能够准确无误地编写出String类的构造函数、拷贝构造函数、赋值函数和析构函数的面试者至少已经具备了C++基本功的60%以上!
在这个类中包括了指针类成员变量m_data,当类中包括指针类成员变量时,一定要重载其拷贝构造函数、赋值函数和析构函数,
这既是对C++程序员的基本要求,也是《Effective C++》中特别强调的条款。
仔细学习这个类,特别注意加注释的得分点和加分点的意义,这样就具备了60%以上的C++基本功!
复制构造函数:只有单个形参,而且该形参是对本类类型对象的引用(常用const修饰),这样的构造函数称为复制构造函数,可用于:
1.根据另一个同类型的对象显示或隐式初始化一个对象
2.复制一个对象,将它的作为实参传递给一个函数
3.从函数返回时复制一个对象
4.初始化顺序容器中的元素
5.根据元素初始化式列表初始化数组元素
C++初始化形式:1.直接初始化【int i(45)】;2.复制初始化:用"="
对于类类型对象,只有指定单个实参或显示创建一个临时对象用于复制时,才使用复制初始化
只包含类类型成员或内置类型(但不是指针类型)成员的类,无须显示定义复制构造函数,也可以复制
禁止复制:例如IO类不允许复制。1.在private中定义复制构造函数,但是类的友元和成员仍能进行复制; 2.在private中声明复制构造函数
重载操作符是一些函数,其名字为operator后跟着所定义的操作符的符号。
一般复制构造函数,也跟着复制操作符
Sales_item& Sales_item::operator=(const Sales_item &rhs) { isbn= rhs.isbn; units_sold =rhs.units_sold; return *this; }
析构函数
动态分配的对象只有在指向该对象的指针被删除时才撤销,若没删除指向动态对象的指针,则不会运行该对象的析构函数。
当对象的引用或者指针超出作用域时,不会运行析构函数。只有在删除指向动态分配对象的指针或实际对象(而不是对象的引用)超出作用域时,才会运行析构函数
如果一个类需要析构函数,那它也需要赋值操作符和复制构造函数 --》三法则
class Sales_item{ public: // // ~Sales_item(){} };
类的析构函数是成员函数,他的名字是在类名字之前加上一个~,无形参,无返回值