我有一个继承到派生类的基类。然后我实例化基础对象和派生对象。
class Base
{ public :
Base() {}
~Base) {} };
class Derived : public Base
{ public :
Derived() {}
~Derived() {} };
Base b;
Derived d;
Derived::Base::d = b;
现在我想将基类对象(b)复制到派生类对象(d)中,而不是它继承的基类。关于语法的任何想法?
答案 0 :(得分:1)
我认为您想说的是,您希望将dist/scripts/main.js
的数据成员初始化为某些Derived
的成员。
您可以使用Base
中的复制构造函数和Base
中传递值的相应构造函数来执行此操作。
Code:
Derived
您可以为转发构造函数和赋值运算符执行类似的操作。
答案 1 :(得分:0)
Derived::Base::d = b;
关于语法的任何想法?
这是错的。工作语法的选项包括:
static_cast<Base&>(d) = b;
d.Base::operator=(b1);
两者都很难看;子类中的赋值运算符隐藏基本版本的结果。正如在C ++中经常出现的那样,语法的丑陋表明这种操作很不寻常,重构可能是一个好主意。
通常,运算符重载和继承不能很好地混合,特别是如果您使用继承进行面向对象编程(即使用虚函数)。在这种情况下,通常会确保该类根本不可分配(C ++ 11非常简单,因为您只是在基类中delete
生成的赋值运算符。)
您还应该阅读有关对象切片的更多信息,例如这两个问题的所有答案和评论: