1

クラスがその親から継承されているため、コンパイラで「非表示」の警告が表示されますが、名前は同じですがパラメーターが異なります。

この関数は、基本クラス関数のパラメーターと名前に一致する何もしないことを示す警告をプッシュするだけの関数を追加します (基本クラスでは当てはまりますが、警告はありません)。派生クラスに追加すると、このコンパイラ警告がクリアされます。これが派生クラスに及ぼす潜在的な影響は何ですか?

編集:基本クラス関数を使用できるようにしたくないと仮定します。(聞かないでください)。

4

3 に答える 3

2

派生クラスで名前を再定義すると、基本クラスの関数が効果的に隠されます。それが警告があなたに伝えていることです!:-)

通常これは間違いであるため、これは警告です。意図的なものであれば問題ありません (ただし、非常にまれです)。

于 2011-04-08T15:21:24.080 に答える
1

ユーザーが を明示的に書き出さない限り、派生インスタンスを介して基本クラス関数にアクセスできないmyDerivedObj.Base::foo()こと。

代わりに、関数のシグネチャを一致させるか、関数名を変更してください。

于 2011-04-08T14:48:12.187 に答える
0

次のように、派生クラスの基本クラス関数を再表示する必要があります。

using Base::Function;

例:

class Base
{
public:
   void Function(int) { cout << "Function(int)" << endl; }
};

class Derived : public Base
{
public:
   using Base::Function; //NOTE THIS LINE : Unhiding base class function!
   void Function(const char *) { cout << "Function(const char *)" << endl; }
};

Derived d;
d.Function(10); //this calls Base::Function

デモ: http://ideone.com/OTBxg

于 2011-04-08T14:48:26.670 に答える