克隆的C ++类的纯虚拟方法(Cloning C++ class with pure virtual

2019-06-24 10:11发布

我的班以下关系。 我想克隆派生的类,但我得到的错误“无法实例化抽象类”。 我怎样才能克隆派生类? 谢谢。

class Base {
public:
    virtual ~Base() {}
    virtual Base* clone() const = 0;
};

class Derived: public Base {
public:
    virtual void func() = 0;
    virtual Derived* clone() const {
        return new Derived(*this);
    }
};

Answer 1:

只有具体的类可以被实例化。 你不得不重新设计的派生的接口,以便做克隆。 首先,除去虚拟无效FUNC()= 0; 然后,你就可以写这样的代码:

class Base {
public:
    virtual ~Base() {}
    virtual Base* clone() const = 0;
};

class Derived: public Base {
public:
    virtual Derived* clone() const {
        return new Derived(*this);
    }
};

另一种解决方案是保持纯虚函数就地和添加的具体类:

class Base {
public:
    virtual ~Base() {}
    virtual Base* clone() const = 0;
};

class Derived: public Base {
public:
    virtual void func() = 0;
};

class Derived2: public Derived {
public:
    virtual void func() {};
    virtual Derived2* clone() const {
        return new Derived2(*this);
    }
};


Answer 2:

无法实例其中有这样一个纯虚函数的类:

virtual void yourFunction() = 0

做一个子类,或者将其删除。



Answer 3:

只有具体的类可以instancied。 FUNC应不纯粹。



Answer 4:

我可以在这里说一些愚蠢的事,但我认为,在派生类的clone方法应的指针还是回到基类。 也许它仍然编译罚款,但至于代码的可维护性来讲,我觉得是更好地只使用方法克隆的指针返回基类。 毕竟,如果你的派生类具有克隆成一个指向派生类,你可以也只是做

Derived original;
Derived* copy = new Derived(original)

当然,你需要实现的拷贝构造函数,但通常应该反正实现(除极端情况下)。



文章来源: Cloning C++ class with pure virtual methods
标签: c++ virtual