6

基本的なC++の質問私はかなり確信しています。パラメーターを受け取らないコンストラクターを持つ基本クラスがあり、保護されたメンバーの一部を初期化する場合、派生クラスは、パラメーターと一致する場合(希望的ですが考えにくい)、この基本コンストラクターも即座に呼び出しますか?そうでない場合は、派生クラスでそうするように明示的に指示する必要なしに、派生クラスから上記の基本コンストラクターを自動的に呼び出すように強制する方法はありますか?ある種のラッパーを作成していて、最初に特定の値に初期化する保護されたメンバーがいくつかあるため、この基本クラスを必要に応じて派生させて操作したいのですが、外部ユーザーは必要ありません。基本コンストラクターを明示的に呼び出すか、独自のコンストラクター内でこれらの値を設定することを忘れないでください。

4

2 に答える 2

7

はい、特に明記されていない限り、デフォルトの基本コンストラクターは常に呼び出されます。

例えば:

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)場合は、派生クラスで使用可能なコンストラクターを明示的に呼び出す必要があります。

于 2012-04-03T21:20:23.447 に答える
2

基本クラスに「デフォルトコンストラクター」(パラメーターを受け取らないコンストラクター。明示的に提供されるか、コンストラクターを明示的に提供しなかったためにコンパイラーによって暗黙的に提供される)がある場合、すべての派生クラスコンストラクターは自動的に代わりに別のコンストラクターを呼び出すように指定しない限り、これを呼び出します。

(基本クラスに「デフォルトコンストラクター」がない場合、パラメーターを受け取るコンストラクターを1つ以上提供し、パラメーターを受け取らないコンストラクターを提供していないため、派生クラスコンストラクターのコンパイルエラーです。呼び出す基本クラスのコンストラクターを示します。)

于 2012-04-03T21:20:52.080 に答える