コンストラクターの継承: エラーと継承ルールを理解する
派生クラスで明示的に再定義せずに基本クラスからコンストラクターを継承しようとする場合提供されたコード スニペットに示されているように、クラスがコンパイルされるのはなぜですかerror?
C 11 より前の C では、コンストラクターは派生クラスによって継承されませんでした。基本クラスのコンストラクターを実行するには、派生クラスのコンストラクター内で明示的に呼び出す必要がありました。これが、指定されたコードで次のエラー メッセージが表示される理由です。
main.cpp:13: error: no matching function for call to ‘B::B(int)’ main.cpp:8: note: candidates are: B::B() main.cpp:8: note: B::B(const B&)
C 11 以降でコンストラクターを継承するために、using キーワードが導入されています。このキーワードを使用すると、基本クラスのすべてのコンストラクターをまとめて継承できます。
class A { public: explicit A(int x) {} }; class B: public A { using A::A; // Inherits all constructors of A };
この方法では、1 行のコードで基本クラスのすべてのコンストラクターを継承できます。ただし、このメソッドを使用すると、特定のコンストラクターの選択的継承は不可能であることに注意することが重要です。選択的継承を実現するには、必要に応じて基本クラスのコンストラクターを呼び出して、派生クラスに個別のコンストラクターを手動で作成する必要があります。
以上がC 11 より前に C の継承コンストラクターに明示的な定義が必要なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。