只有具体的类可以被实例化。您必须重新设计 Derived 的界面才能进行克隆。首先,删除virtual void 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);
}
};