仮想関数における予期しないデフォルト引数の動作: 根本原因を理解する
このコード スニペットでは、デフォルトに関連する興味深い問題が発生します。仮想関数の引数。出力が "D--data=20" であると予想されていたにもかかわらず、代わりに "D--data=10" が表示されます。根本原因を理解するために内部メカニズムを詳しく調べてみましょう。
この例では、デフォルト引数を取る print という名前の仮想関数を持つ 2 つのクラス B と D があります。クラス D では、print 関数をオーバーライドし、別のデフォルト引数を指定します。 D のインスタンスを作成するときは、B へのポインターを介して print 関数にアクセスします。
C 標準 (8.3.6.10) によれば、「仮想関数呼び出しは、オブジェクトを表すポインタまたは参照の静的型によって決定される仮想関数。」これは、基本クラスへのポインターを介して仮想関数を呼び出す場合、派生クラスでオーバーライドされたデフォルト引数に関係なく、基本クラスの宣言で定義されたデフォルト引数が使用されることを意味します。
したがって、呼び出したとき、ポインタ bp を介して print を実行すると、デフォルトの引数は bp の静的型 (B) によって決定されます。その結果、B::print のデフォルト引数が使用され、出力は次のようになります。予期された「D--data=20」ではなく「D--data=10」
以上が仮想関数のデフォルトの引数で基本クラスの値が使用されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。