【问题标题】:Making a copy constructor and assignment operator from a derived class从派生类创建复制构造函数和赋值运算符
【发布时间】:2014-05-16 09:07:27
【问题描述】:

我想知道如何同时使用派生类中的复制构造函数和赋值运算符。似乎关于这个问题的所有其他问题都涉及基类也有自己的赋值运算符,我的基类不允许有。

有问题的成员函数是:

SpecialOrder& operator=(const SPecialOrder &source)

【问题讨论】:

  • 在你进一步寻找这棵错误的树之前,我建议阅读the copy/swap idiom,因为这具有明显的设计缺陷无效期望的味道。

标签: c++ inheritance derived-class


【解决方案1】:

您将需要以一种或另一种方式处理复制基类成员。

标准方法是在派生类中调用基类赋值运算符,例如Order::operator=(source);Order::Order(source); 不正确,实际上你的编译器应该告诉你的,你不能在已经创建的对象上调用构造函数)。

您的另一种选择是使用基类的公共/受保护方法来尝试设置状态,但是如果您无法访问基类赋值运算符或复制构造函数,或者它们未定义/删除,则很可能基类从一开始就没有打算被复制。

【讨论】:

  • Order::operator=(source) 确实是我的问题的答案。该程序现在完美运行。我的问题是,为什么?基类中根​​本没有定义赋值运算符,只有在SpecialOrder的派生类中。我如何能够将范围限定到 Order 类并使用属于其子类之一的成员函数。我一直认为孩子是从父母那里继承下来的,而不是反过来。
  • 阅读Implicitly-declared copy assignment operator部分en.cppreference.com/w/cpp/language/as_operator
猜你喜欢
  • 1970-01-01
  • 2011-07-19
  • 1970-01-01
  • 1970-01-01
  • 2013-04-13
  • 2012-10-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多