0

いくつか質問があります/非表示に関する一般的な質問はありますか?

基本クラスには関数があります: f() 派生クラスは仮想 f() を宣言するようになりました

派生関数が const の場合はどうなりますか? これは隠れませんか?

戻り値の型が異なる場合はどうなりますか?

パラメータが違う?

1つは静的で、もう1つはそうではありませんか?

2 つの関数のこれらの違いのどれが非表示を引き起こすか、または非表示を引き起こさないのか疑問に思っています。

4

2 に答える 2

4

隠すことは署名ではなく名前に関するものです。

于 2013-03-04T21:23:24.440 に答える
0

まず最初に。

非表示とは、派生クラスで基本クラス関数をオーバーライドすると、その派生クラスで、定義した元の基本クラス メソッドが隠されるという考えを指します。-- そうは言っても、基本クラスから関数の定義にアクセスする必要がある場合は、非表示にしないようにコードにこれを含める必要があります。

using baseClass::functionName();

Const - const を使用して関数を 2 回定義すると、const を使用せずに別の関数を定義すると、それらは異なります。Scott Mayers の本 effective c++ には、const と non const-ness を説明する優れた章が含まれています。完全に理解するために読むことをお勧めします。

戻り値の型が異なることで関数をオーバーライドすることはできません。おそらく、あいまいであるというコンパイル時エラーが発生します-テストして確認してください。

ただし、異なる引数リストを使用して関数をオーバーロードすることはできます。これは、関数をオーバーロードする方法です。

オーバーライドとオーバーロードを混同している場合は、それについても読むことをお勧めします。簡単に言うと、オーバーロードは、同じスコープ内に異なる引数リストを持つ 2 つの関数がある場合です。一方、オーバーライドは、同じ引数リストを持つ派生クラスで基底クラスの仮想関数を再定義する場合です。

于 2013-03-04T21:40:53.677 に答える