C++primer 第13章 复制控制

复制构造函数,赋值操作符,系够函数总称复制控制

能够准确无误地编写出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(){}

};

类的析构函数是成员函数,他的名字是在类名字之前加上一个~,无形参,无返回值

 

你可能感兴趣的:(Prim)