我想知道如何从派生类中使用复制构造函数和赋值运算符。似乎关于这个问题的所有其他问题都涉及基类也有一个它自己的赋值运算符,而我的基类是不允许的。在问题从派生类中创建复制构造函数和赋值运算符
成员函数是:
SpecialOrder &运算符=(常数SPecialOrder &源)
我想知道如何从派生类中使用复制构造函数和赋值运算符。似乎关于这个问题的所有其他问题都涉及基类也有一个它自己的赋值运算符,而我的基类是不允许的。在问题从派生类中创建复制构造函数和赋值运算符
成员函数是:
SpecialOrder &运算符=(常数SPecialOrder &源)
你将需要处理复制基类成员的一种方式或另一种。
标准方法是在派生类中调用基类赋值运算符,例如, Order::operator=(source);
(Order::Order(source);
不正确,实际上你的编译器应该已经告诉过你了,你不能在已经创建的对象上调用构造函数)。
您的其他选择是使用基类的public/protected方法来尝试和设置状态,但是如果您不能访问基类赋值运算符或复制构造函数,或者它们没有被定义/删除,它是可能这个基类从来没有打算复制到第一位。
Order :: operator =(source)确实是我的问题的答案。该程序现在完美工作。我的问题是,为什么?根本没有在基类中定义赋值运算符,只有在派生类SpecialOrder中。我如何能够将范围扩展到Order类并使用属于其子项之一的成员函数?我一直认为孩子是从父母那里继承的,而不是相反的。 – onemic
阅读'隐含声明的复制赋值运算符'部分http://en.cppreference.com/w/cpp/language/as_operator – user657267
在你进一步咆哮这个错误的树之前,我会建议阅读[copy/swap idiom](http://stackoverflow.com/questions/3279543/what-is-the-copy-and-swap-idiom ),因为它具有来自设计缺陷的无效期望的独特香气。 – WhozCraig