继承具有私有复制构造函数和赋值运算符的不可复制类如何禁止在派生类上使用复制构造函数和赋值运算符?请在单独回复时考虑以下情况,
如果,默认复制构造函数和赋值运算符是编译器在派生类中生成的,而不是程序员添加的
假设,复制构造函数和赋值运算符被程序员在派生类中定义并声明为public
如果,复制构造函数和赋值运算符被程序员在派生类中定义并声明为私有呢?
继承具有私有复制构造函数和赋值运算符的不可复制类如何禁止在派生类上使用复制构造函数和赋值运算符?请在单独回复时考虑以下情况,
如果,默认复制构造函数和赋值运算符是编译器在派生类中生成的,而不是程序员添加的
假设,复制构造函数和赋值运算符被程序员在派生类中定义并声明为public
如果,复制构造函数和赋值运算符被程序员在派生类中定义并声明为私有呢?
1)然后任何复制或赋值都将无法编译,因为编译器生成的复制构造函数和赋值运算符需要访问基类的那些。
2)那将是一个程序员错误。你希望你的类是不可复制和不可分配的,所以你不应该提供公共方法来这样做。编译器可能会产生警告,但代码会编译。
3)然后赋值和复制将导致编译错误,如上述1),除非由friend
函数或类调用,或者在同一类内部调用。
带回家的信息是您不应该为不可复制的类提供复制构造函数或赋值运算符。让继承机制自己提供必要的限制。
默认的复制构造函数和赋值运算符是编译器在派生类中生成的,不是程序员添加的
隐式函数将尝试调用基类中的对应函数。这是不可能的,因为它们是基类私有的,所以你会得到一个编译错误。这就是基类的工作方式。
复制构造函数和赋值运算符由程序员在派生类中定义并声明为public
那么你就破坏了从基类继承的目的;您的派生类现在可以通过这些函数复制。
复制构造函数和赋值运算符由程序员在派生类中定义并声明为私有
再次,您击败了基类并使您的类可复制;但仅限于其成员和朋友功能。