3
class Base {
public:
    int a;
    Base():a(0) {}
    virtual ~Base();
}
class Derived : public Base {
public:
    int b;
    Derived():b(0) {
        Base* pBase = static_cast<Base*>(this);
        pBase->Base();
    }
    ~Derived();
}

基本クラスのコンストラクターへの呼び出しは必要ですか、それとも c++ が自動的に行いますか? たとえば、C++ では、派生クラスから基底クラスのメンバーを初期化する必要がありますか?

4

2 に答える 2

9

基本クラスのコンストラクターは、派生クラスのコンストラクターが呼び出される前に自動的に呼び出されます。

初期化リストを使用して、呼び出す基本コンストラクター (複数ある場合) を明示的に指定できます。

class Base {
  public:
    int a;
    Base():a(0) {}
    Base(int a):a(a) {}
};
class Derived {
  public:
    int b;
    Derived():Base(),b(0) {}
    Derived(int a):Base(a),b(0) {}
};
于 2012-08-29T00:06:45.747 に答える
1

基本クラスのコンストラクターは自動的に呼び出されます (派生クラスのコンストラクターの前に)。したがって、基本コンストラクターを手動で呼び出す必要はありません。

于 2012-08-29T00:05:33.733 に答える