我正在开发 C++ 程序,但在使用克隆时遇到多重继承问题。问题(以简化形式)如下。
我希望能够克隆从类 Base 派生的所有对象。
class Base{
public:
virtual Base* clone()const=0;
};
Run Code Online (Sandbox Code Playgroud)
我想定义另外两个从 Base 派生的类,它们都是抽象的,即我不能定义克隆函数,但我必须以某种方式声明它们(我想确保,如果我克隆 Derived*,我会得到back Derived* 而不是 Base*,即我想避免在应用点进行转换)
class Derived1: public virtual Base{
public:
virtual Derived1* clone()const=0;
};
class Derived2: public virtual Base{
public:
virtual Derived2* clone()const=0;
};
Run Code Online (Sandbox Code Playgroud)
问题来了,当我声明一个继承自 Derived1 和 Derived2 的第四个类时:
class Derived3: public Derived1,public Derived2{
protected:
int b;
public:
Derived3():b(3){};
Derived3(Derived3 const& l_B) {b=l_B.b;};
virtual Derived3* clone()const{return new Derived3(*this);}
;
};
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我将从 Visual C++ 2010 编译器 C2250: 'Derived3' : 'Derived1 *Base::clone(void) const' 的模糊继承中得到。如果我在 Derived1 和 …