デフォルトのコンストラクター呼び出しに対する仮想継承の影響
仮想継承を扱う場合、コンストラクター呼び出しの複雑さを理解することが重要です。提供されているコードでは、娘型のオブジェクトがインスタンス化され、デフォルトの grandama() コンストラクターが予期せず呼び出されます。
仮想継承の基本的な側面は、最も派生したクラスのコンストラクターが仮想ベースを直接呼び出すことです。クラスのコンストラクター。この状況では、娘コンストラクターは、初期化リストを介した明示的な呼び出しを行わずに、祖母コンストラクターを直接呼び出します。
娘クラスの初期化リストで祖母の明示的なコンストラクターが省略されているため、コンパイラーは暗黙的にデフォルト コンストラクターを呼び出します。 。この問題を修正するには、次のコード スニペットに示すように、初期化リストで目的のコンストラクターを明示的に指定します。
daughter(int attr) : grandmother(attr), mother(attr) { ... }
この変更により、適切なグランド コンストラクターが確実に呼び出され、初期動作が解決されます。さらに、提供されている FAQ エントリでは、このトピックに関する追加の洞察が提供され、さらに明確になります。
以上が仮想継承を使用してドーター オブジェクトをインスタンス化するときに、グランドマザー クラスのデフォルト コンストラクターが呼び出されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。