下面是演示代码:
class A {
public:
A(){}
virtual void method()=0;
//....
virtual ~A(){};
}
class B : public A{
static A * ptr;
//....
public:
//....
static A* GetInstance() {
if (ptr == nullptr)
ptr = new B(); // error, currently B is an abstract class, it has not been constructed
return ptr;
}
//.....
}
B类派生自抽象基类A,我如何在B类中使用单例?
你必须在类 B 中实现你的方法 1。 这不是单例的问题。问题是,您无法创建抽象类的实例。你的类 B 是抽象的,因为并非所有纯虚方法都在类 B 中实现。
或者执行以下操作:
类AI实现:公共A
在AImplement内部,你实现了你的方法1,这样AImplement就变得不抽象了。
现在,您可以在类 B 中创建 AImplement。
并且不要从 A 导出 B。