Con*_*tin 3 c++ inheritance abstract-class
如果父类具有纯虚拟析构函数,我该如何正确继承它?我有一个头文件(由IBM Rational Rose生成),如下所示:
class MyClass{
protected:
inline MyClass() {};
MyClass(const MyClass&);
MyClass& operator=(const MyClass&);
public:
inline virtual ~MyClass() = 0;
virtual void someMethod() = 0;
};
Run Code Online (Sandbox Code Playgroud)
现在我想实现这个纯抽象类 - 即
class MyClassImpl : public MyClass {
public:
MyClassImpl(){}
virtual void someMethod() {}
};
int main(int argc, char*argv[]) {
MyClassImpl impl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但无论我尝试什么(即在MyClassImpl中定义析构函数;虚拟/非虚拟),我都会收到错误消息:error LNK2019: unresolved external symbol "public: virtual __thiscall MyClass::~MyClass(void)" (??1MyClass@@UAE@XZ) referenced in function "public: virtual __thiscall MyClassImpl::~MyClassImpl(void)" (??1MyClassImpl@@UAE@XZ).
有没有办法在MyClassImpl没有变化的情况下实施MyClass?
您必须定义析构函数,即使它是纯虚拟(唯一).
加
MyClass::~MyClass() {}
Run Code Online (Sandbox Code Playgroud)
只有一个.CPP文件.
(例如,请参阅"纯虚拟析构函数"下的http://en.cppreference.com/w/cpp/language/destructor.另外,为什么我们需要在C++中使用纯虚拟析构函数?)