小编Xor*_*nus的帖子

如何在具有抽象类的多重继承的 C++ 中使用 clone()?

我正在开发 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 和 …

c++ clone abstract pure-virtual

3
推荐指数
1
解决办法
3015
查看次数

标签 统计

abstract ×1

c++ ×1

clone ×1

pure-virtual ×1