ホームページ > バックエンド開発 > C++ > Grandmother クラスのデフォルト コンストラクターが仮想継承で呼び出されるのはなぜですか?

Grandmother クラスのデフォルト コンストラクターが仮想継承で呼び出されるのはなぜですか?

DDD
リリース: 2024-11-16 22:22:03
オリジナル
921 人が閲覧しました

Why is the Grandmother Class's Default Constructor Called in Virtual Inheritance?

仮想継承でデフォルト コンストラクターが呼び出されるのはなぜですか?

仮想継承を使用して娘クラスの新しいオブジェクトを作成する場合、デフォルト コンストラクターは祖母クラスが予期せず呼び出されます。ユーザーが引数を使用してマザークラスのコンストラクターを明示的に呼び出すことを考えると、この動作は直観に反しているように見えるかもしれません。

説明:

仮想継承では、仮想ベースのコンストラクターclass は、最も派生したクラスのコンストラクターによって直接呼び出されます。指定されたコードでは、娘クラスが最も派生したクラスであるため、祖母コンストラクターを直接呼び出します。

娘クラスは初期化リストで祖母コンストラクターに引数を提供しないため、デフォルト祖母クラスのコンストラクターが自動的に呼び出されます。これは、デフォルトでは、コンパイラーは、特定のコンストラクターが呼び出されない場合にはデフォルトのコンストラクターが使用されると想定するためです。

解決策:

必要な祖母コンストラクターを呼び出すには引数を使用する場合は、娘クラス コンストラクターの初期化リストを明示的に更新する必要があります。正しいコードは次のとおりです:

daughter(int attr) : grandmother(attr), mother(attr) { ... }
ログイン後にコピー

これにより、指定された引数を使用して祖母コンストラクターが確実に呼び出されます。あるいは、祖母クラスは引数を受け入れるデフォルトのコンストラクターを提供できます。

以上がGrandmother クラスのデフォルト コンストラクターが仮想継承で呼び出されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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