当我们自己为class设计 copy构造函数和copy assignment操作符时,如果我们漏掉一个成员变量时,编译器并不会友好的告诉你,当然有时候我们也是故意这样做。当我们担起“为派生类写copy 函数”时责任重大,必须也要小心的复制其base class部分 如下:
class Customer {};class PriorityCustomer:public Customer{public : PriorityCustomer(const PriorityCustomer& rhs); PriorityCustomer& operator= (const PriorityCustomer& rhs);private: int priority;}PriorityCustomer::PriorityCustomer(const PriorityCustomer& rhs):Customer(rhs), //调用基类的copy构造函数priority(rhs.priority){ }PriorityCustomer& PriorityCustomer::operator=(const PriorityCustomer& rhs){ Customer::operator=(rhs); priority = rhs.priority; return *this;}
由于copy构造函数和 copy assignment 函数很相似,难免不让我们产生互相调用对方的想法,所以我们需要澄清两点:
1.在copy assignment中调用copy构造函数是不合法的因为我们试图创建已经存在的对象。
2.相反在copy 构造函数里调用copy assignment也是不合法的,因为我们试图给没有初始化的变量赋值。。