2011-09-23 13 views
2

私は2つの他の抽象クラスを実装するシングルトンクラスを持っています。クラスインスタンスを作成できません

thisMonkey = new monkey()のために私のmonkey :: getMonkeyが失敗しました。 "抽象クラス型のオブジェクト" monkey "が許可されていません"を返します。私は抽象クラスをインスタンス化できないことを知っていますが、私の猿は2つの抽象クラスを実装しています(つまり、抽象クラスではありません)。

この解決策には何がありますか?

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; 

純粋仮想クラスは次のようになり。これは、派生クラスの1つを指すポインタがあり、その "純粋なvirutal"関数を呼び出すときに呼び出されます。私。

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

はにマップされます:

monkey::methodName 
関連する問題