コンストラクターの継承
指定したコード スニペット:
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 サイトの他の関連記事を参照してください。