基本的なC++の質問私はかなり確信しています。パラメーターを受け取らないコンストラクターを持つ基本クラスがあり、保護されたメンバーの一部を初期化する場合、派生クラスは、パラメーターと一致する場合(希望的ですが考えにくい)、この基本コンストラクターも即座に呼び出しますか?そうでない場合は、派生クラスでそうするように明示的に指示する必要なしに、派生クラスから上記の基本コンストラクターを自動的に呼び出すように強制する方法はありますか?ある種のラッパーを作成していて、最初に特定の値に初期化する保護されたメンバーがいくつかあるため、この基本クラスを必要に応じて派生させて操作したいのですが、外部ユーザーは必要ありません。基本コンストラクターを明示的に呼び出すか、独自のコンストラクター内でこれらの値を設定することを忘れないでください。
2 に答える
はい、特に明記されていない限り、デフォルトの基本コンストラクターは常に呼び出されます。
例えば:
class A
{
public:
A() { std::cout << "A"; }
};
class B : A
{
public:
B() {}
};
int main()
{
B b;
return 0;
}
出力します:
A
「明示的に別の言い方をすると」とは、派生クラスとは異なるコンストラクターを呼び出すことができることを意味します。
class A
{
public:
A() { std::cout << "A"; }
A(int) { std::cout << "AAA"; }
};
class B : A
{
public:
B() : A(1) {} //call A(int)
};
int main()
{
B b;
return 0;
}
出力します
AAA
デフォルトのコンストラクターがない場合(デフォルトではないコンストラクターを宣言し、デフォルトのコンストラクターではない場合)、またはデフォルトのコンストラクターが表示されない(としてマークされているprivate
)場合は、派生クラスで使用可能なコンストラクターを明示的に呼び出す必要があります。
基本クラスに「デフォルトコンストラクター」(パラメーターを受け取らないコンストラクター。明示的に提供されるか、コンストラクターを明示的に提供しなかったためにコンパイラーによって暗黙的に提供される)がある場合、すべての派生クラスコンストラクターは自動的に代わりに別のコンストラクターを呼び出すように指定しない限り、これを呼び出します。
(基本クラスに「デフォルトコンストラクター」がない場合、パラメーターを受け取るコンストラクターを1つ以上提供し、パラメーターを受け取らないコンストラクターを提供していないため、派生クラスコンストラクターのコンパイルエラーです。呼び出す基本クラスのコンストラクターを示します。)