仮想関数のデフォルトの引数で基本クラスの値が使用されるのはなぜですか?

Mary-Kate Olsen
リリース: 2024-11-12 16:57:01
オリジナル
425 人が閲覧しました

Why Does the Default Argument of a Virtual Function Use the Base Class Value?

仮想関数における予期しないデフォルト引数の動作: 根本原因を理解する

このコード スニペットでは、デフォルトに関連する興味深い問題が発生します。仮想関数の引数。出力が "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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート