2011-07-12 6 views
1

インターフェイスメソッドと同じシグネチャで静的メソッドを定義することのメリットは、それを実装するクラスです。インターフェイスメソッドと全く同じシグネチャを持つ静的メソッドを持つC++クラスの利点

class IInterface 
{ 
public: 
    virtual void fn()=0; 
} 

class Impl :IInterface 
{ 
public: 
    ~Impl(); 
    static void fn(); 
} 

Impl::~Impl{ 
} 

Impl::fn(){ 
//do something 
} 
+1

あなたはこれを見ましたか?あなたの例では、 'Impl'はまだ' IInterface :: fn'をオーバーライドしないので、抽象クラスです。 –

+0

サードパーティのライブラリでこれをご覧ください。基本的に 'Impl'はラッパーです。 Impl :: fn acutllyの静的実装は、librayメソッドex:Impl :: fn(){:: fn()}を呼び出します。私は、インターフェイスは模擬テスティングをサポートすることだと思います。それはどのように役立つだろうか? – Somaraj

答えて

0

このような方法をとる利点はありません。 staticメソッドは、virtualメソッド(常に非static)を上書きしません。

は、実際にはそれはあなたが基本メソッドをオーバーライドする実際のメソッドを実装することができないことを、欠点を持っています。単一のclass(1つはstatic、もう1つは非static)で同じメソッドシグネチャを持つことができないためです。

class Impl :IInterface 
{ 
public : 
~Impl(); 
staic void fn(); 
void fn() {} // error: invalid (can't have same signature) 
}; 
0

利点はありません。それは&が純粋仮想関数をオーバーライドすることはできませんdoes'nt ので、

あなたの派生クラスImplはまだ抽象クラスようです。オブジェクトを作成することはできません。彼らは任意のオブジェクトに固有のものではありませんので、静的な関数は、thisポインタを渡さないながらダイナミックな多型は、実行時に関数呼び出しを評価するthisを使用しているため

静的関数は、基本クラスから仮想関数をオーバーライドすることはできません。

関連する問題