我有一个单例类,它实现了另外两个抽象类。
我的monkey :: getMonkey失败,因为thisMonkey = new monkey()
返回“不允许”抽象类类型“猴子”的对象“。我知道你不能实例化抽象类,但我的猴子实现了两个抽象类(意思是它不是抽象的......对吗?)
这是什么解决方案?
class monkey : public animal,
public npc {
public:
~monkey();
static monkey* getMonkey();
private:
monkey();
static monkey* thisMonkey;
}
monkey::monkey() {};
monkey::~monkey() {};
/* .. implements the virtual methods of animal and npc ... */
monkey::getMonkey() {
if (!thisMonkey)
thisMonkey = new monkey();
return thisMonkey;
}
答案 0 :(得分:3)
你没有表现出足够准确,但先验,你的班级monkey
没有实现基类中的所有纯虚函数。具有尚未被覆盖的纯虚函数的类是抽象的。
答案 1 :(得分:1)
在类anmial
和npc
中查找声明为pure-virtual的所有方法,并在monkey类中提供它们的实现。它们是猴子类的基类,看起来你还没有完成它们的抽象接口。
纯虚拟类看起来像:
return_type methodName(params)=0;
您必须在派生类(monkey)中使用该实现提供具有该确切原型的函数。当您有一个指向其中一个派生类的指针并调用该“纯虚拟”函数时,将调用此方法。即。
animal* aptr = new monkey;
aptr->methodName(params);
将映射到:
monkey::methodName