2016-09-16 2 views
-1

私は仮想メソッドでテンプレートクラスを定義している:私は、テンプレートクラスから継承し、クラスを定義し、そのメソッドをオーバーライドしているSonのオーバーライドメソッドは、C++でFatherテンプレートクラスのオーバーライドされたメソッドを呼び出せますか?

template<class T> 
class Father{ 
    public: 
    virtual void foo(int a); 
} 

class Son: public Father<int>{ 
    public: 
    virtual void foo(int a); 
} 

がオーバーライドするメソッドでシャルを息子は父親の優先メソッドを呼び出すことができますか?

Iは3つの以下の実装を試みたが、いずれもコンパイルするようだ:Son.cppで)

1)Son.cpp

void Son::foo(int a){ 
    Father::foo(a);  
} 
で:

void Son::foo(int a){ 
    ::foo(a);  
    } 

3)でSon.h

using Father::foo; 
virtual void foo(int a); 

I n Son.cpp

void Son::foo(int a){ 
    Father::foo(a);  
    } 

これを行う方法はありますか?答えはYESであると思われると、次のコードはコンパイルされています:

+0

あなたの最初の試みは、コンパイル:[wandboxリンク](http://melpon.org/wandbox/permlink/RXzoLsy8AUVJjw8p) –

+0

実際には、次のオプション4がコンパイルされていることがわかりました:void Son :: foo(int a){ \t父親 :: foo(a); \t} – ellysisland

答えて

1

は、私はちょうどこの解決した

void Son::foo(int a){ 
    Father<int>::foo(a);  
} 
関連する問題