2011-09-23 147 views
2

我有一個實現兩個其他抽象類的單例類。無法創建類實例

我的猴子:: 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; 
} 

回答

3

你沒有表現出足夠的說清楚,但先驗,類monkey 不會實現所有的基類中的純虛函數。具有純粹的虛擬功能的類沒有被覆蓋是抽象的。

1

查找類anmialnpc中聲明爲純虛擬的所有方法,並在猴類中爲它們提供實現。它們是猴類的基類,看起來你沒有完成它們的抽象接口。

純虛類的樣子:

return_type methodName(params)=0; 

您必須在派生類(猴)的功能與精確的原型,一個實現。當你有一個指向其中一個派生類的指針並調用該「純虛函數」函數時,將會調用它。即

animal* aptr = new monkey; 
aptr->methodName(params); 

將映射到:

monkey::methodName