Sales_item::Sales_item(const Sales_item &orig):
isbn(orig.isbn), //使用string拷贝构造函数
units_sold(orig.units_sold), //直接复制orig.units_sold
revenue(orig.revenue) //直接复制orig.revenue
{ }
三、定义自己的拷贝构造函数。
拷贝构造函数就是接受单个类类型引用形参(通常用const修饰)的构造函数。因为用于向函数传递对象和从函数返回对象,该构造函数一般不应设置为explicit,拷贝构造函数应将实参的成员复制到正在构造的对象。它与类同名,没有返回值,可以(而且应该)使用构造函数初始化列表初始化新创建对象的成员,可以在函数体中做任何其他必要工作。
说明:
(1)合成拷贝构造函数只完成必要的工作。只包含类类型成员或内置类型(但不是指针类型)成员的类,无须显式地定义拷贝构造函数,也可以复制。
(2)有些类必须定义复制构造函数对复制对象时发生的事情加以控制。例如:
1)类有一个数据成员是指针,或者有成员表示在构造函数中分配的其他资源
2)类在创建新对象时必须做一些特定工作。
四、禁止复制。
有些类需要完全禁止复制,例如:iostream。如何禁止复制呢?省略拷贝构造函数这种做法不行,因为编译器将会帮我们合成一个。为了防止复制,类必须显式声明其拷贝构造函数为private。
说明:
(1)如果拷贝构造函数是私有的,将不允许用户复制该类型对象。
(2)类的友元和成员仍可以进行复制,如果也想禁止它们,可声明一个私有的拷贝构造函数但不对其定义。声明而不定义是合法的,但使用未定义的成员将导致链接失败。
(3)通过声明不定义私有拷贝构造函数,可禁止任何复制类类型对象的尝试:用户尝试复制导致编译错误,成员函数和友元复制导致链接错误。
(4)如果定义了拷贝构造函数,也必须定义默认构造函数。不允许复制的类对象只能作为引用传递给函数或从函数返回,它们也不能作为容器元素,严重局限类的使用。
------------------------------分割线------------------------------
C++ Primer Plus 第6版 中文版 清晰有书签PDF+源代码
将C语言梳理一下,分布在以下10个章节中:
Linux-C成长之路(十):其他高级议题