ホームページ > バックエンド開発 > C++ > C 11 より前に C の継承コンストラクターに明示的な定義が必要なのはなぜですか?

C 11 より前に C の継承コンストラクターに明示的な定義が必要なのはなぜですか?

DDD
リリース: 2025-01-03 12:49:39
オリジナル
309 人が閲覧しました

Why Do Inherited Constructors in C   Require Explicit Definition Before C  11?

コンストラクターの継承: エラーと継承ルールを理解する

派生クラスで明示的に再定義せずに基本クラスからコンストラクターを継承しようとする場合提供されたコード スニペットに示されているように、クラスがコンパイルされるのはなぜですか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 サイトの他の関連記事を参照してください。

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