ホームページ >バックエンド開発 >C++ >C でコンストラクターを継承するにはどうすればよいですか?

C でコンストラクターを継承するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-25 15:30:10606ブラウズ

How Can I Inherit Constructors in C  ?

コンストラクターの継承

指定したコード スニペット:

class A
{
    public:
        explicit A(int x) {}
};

class B: public A
{
};

int main(void)
{
    B *b = new B(5);
    delete b;
}

が欠落しているため、GCC でコンパイルするとエラーが発生します。 B(int) に一致するコンストラクター。 B が A のコンストラクターを継承すると予想されるかもしれませんが、 C ではデフォルトではそうではありません。

C 11 以降では、using を使用する コンストラクター継承 と呼ばれる新機能が導入されました。 A::A を使用して追加します。クラス B 内では、A のすべてのコンストラクターを明示的に継承できます。

class A
{
    public:
        explicit A(int x) {}
};

class B: public A
{
     using A::A;
};

ただし、コンストラクターの継承は全か無かの概念です。特定のコンストラクターのみを選択的に継承することはできません。これを試みる場合は、必要なコンストラクターを手動で定義し、それぞれのコンストラクターから基本コンストラクターを明示的に呼び出す必要があります。

C 03 以前では、コンストラクターの継承はサポートされていませんでした。コンストラクターは、各派生クラス コンストラクターで基本コンストラクターを個別に呼び出して手動で継承する必要がありました。

テンプレート化された基本クラスの場合、テンプレート構文を使用してすべてのコンストラクターを継承できます。例:

template<class T>
class my_vector : public vector<T> {
    public:
    using vector<T>::vector; ///Takes all vector's constructors
    /* */
};

以上がC でコンストラクターを継承するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。