1

みなさんこんにちは皆さんは、オーバーロードとオーバーライドが何らかの形で行われている次のC++コードについて困惑しています。ここでC++でのオーバーライドとオーバーロードの同時実行

は私のコンパイラが与えるエラーです(コード内部MINGW32-G ++ ::ブロック13.12)

error: no matching function for call to 'Derived::show()' 
note: candidate is: 
note: void Derived::show(int) 
note: candidate expects 1 argument, 0 provided 

ここではそれらを生産するコードです。

#include <iostream> 
    using namespace std; 

    class Base{ 
    public: 
     void show(int x){ 
     cout<<"Method show in base class."<<endl; 
     } 
     void show(){ 
     cout<<"Overloaded method show in base class."<<endl; 
     } 
    }; 

    class Derived:public Base{ 
    public: 
     void show(int x){ 
     cout<<"Method show in derived class."<<endl; 
     } 
    }; 

    int main(){ 
     Derived d; 
     d.show(); 
    } 

私はBase :: show()を仮想として宣言しようとしました。それから、Base :: show(int)で同じことを試しました。どちらもうまくいきません。

+0

"隠蔽ルール"を参照してください。あなたのコンパイラは、必要とされていることをやっています。 – Peter

答えて

1

これは名前の非表示です。 Derived::showは、Baseに同じ名前のメソッドを非表示にします。あなたはそれらをusingによって紹介することができます。

class Derived:public Base{ 
public: 
    using Base::show; 
    void show(int x){ 
    cout<<"Method show in derived class."<<endl; 
    } 
}; 
関連する問題