2012-01-10 10 views
4

私は抽象クラスを単一の、しかしいくつかのデフォルトの実装で、C++で作成したいと思います。 それを継承するすべてのクラスはデフォルトの動作を持ちますが、基本クラスのインスタンスを作成することはできません。 私は純粋なバーチャルとしてfooをマークした場合、私はそれに実装を追加することはできません。いくつかの実装を持つC++抽象クラス

class Base 
{ 
public: 
    virtual void foo() =0; //Now I can't add foo implementation 
}; 

私の解決策は純粋な仮想としてはなく、コンストラクタを隠すことでした。 純粋なクラスとしてマークすることが可能かどうか疑問に思っていますが、まだ実装されていますか?

+4

「私の解決策は純粋な仮想としてはなく、コンストラクタを隠すことだけでした」と間違っていますか?それは完全に合理的に聞こえる。 –

+1

純粋な仮想関数の実装を提供することに問題はありません。しかし私はジェームズに同意します、あなたの元々のアイデアはおそらく最高です。 –

+0

おそらく、専用のコンストラクタを使用するのがよいでしょう。または、C++ 11コンパイラを使用している場合は、コンストラクタを[deleted](http://en.wikipedia.org/wiki/C++11#Explicitly_defaulted_and_deleted_special_member_functions)としてマークすることができます。 –

答えて

9

You can add an implementation to a pure virtual function派生するクラスは、明示的にbase-class-methodを呼び出すことによって、デフォルトの実装を使用できます。

+0

素晴らしい...ここhttp://codepad.org/T0KZ7YKoで動作します –

関連する問題