C++ 11では、コンストラクターを継承することは何を意味しますか?それが私が思うものである場合(基本クラスのコンストラクタは派生クラスのスコープに持ち込まれます)、私のコードにどのような影響がありますか?そのような機能の用途は何ですか?
コンストラクターの継承は、まさにそれを意味します。派生クラスは、その基本クラスからコンストラクターを暗黙的に継承できます。
構文は次のとおりです。
struct B
{
B(int); // normal constructor 1
B(string); // normal constructor 2
};
struct D : B
{
using B::B; // inherit constructors from B
};
したがって、Dには次のコンストラクタが暗黙的に定義されています。
D::D(int); // inherited
D::D(string); // inherited
Dsメンバーは、これらの継承されたコンストラクターによってデフォルトで構築されます。
コンストラクタが次のように定義されているようです。
D::D(int x) : B(x) {}
D::D(string s) : B(s) {}
この機能は特別なものではありません。これは、定型コードの入力を節約するための単なる省略表現です。
以下に詳細を示します。
12.9コンストラクターの継承
1)コンストラクタに名前を付けるusing-declarationは、継承するコンストラクタのセットを暗黙的に宣言します。 using-declarationで名前が付けられたクラスXから継承されたコンストラクターの候補セットは、次のようにデフォルトのパラメーターの変換から生じる実際のコンストラクターと概念的なコンストラクターで構成されます。
- xのすべての非テンプレートコンストラクター、および
- デフォルト引数を持つ少なくとも1つのパラメーターを持つXの各非テンプレートコンストラクター、Ellipsisパラメーター指定を省略し、parameter-type-listの最後からデフォルト引数を持つパラメーターを連続して省略した結果として得られるコンストラクターのセット、そして
- xのすべてのコンストラクタテンプレート、および
- デフォルト引数を持つ少なくとも1つのパラメーターを持つXの各コンストラクターテンプレートについて、Ellipsisパラメーター指定を省略し、parameter-type-listの最後からデフォルト引数を持つパラメーターを連続して省略した結果のコンストラクターテンプレートのセット