3

ここの初心者。私は会社コードを見ています。

クラスAにはメンバー変数がないように見えますが、Aのコンストラクターでは、クラスAにタイプBのメンバー変数(またはメンバー変数がまったく含まれていません!)が含まれていなくても、オブジェクトBを初期化します。

質問するほど理解してないんだろうな…一体何が起きてるんだよ!? 私の直感では、変数を初期化する前に変数が必要です。オブジェクトを持たずにオブジェクトを初期化することはどのように可能ですか (またはそれが何をするのですか)?

.h:

class A: public B
{
public:
     A(bool r = true);
     virtual ~A;

private:
}

.cpp:

A::A(bool r) : B(r ? B::someEnumeration : B::anotherEnumeration)
{
}

A::~A()
{
}

助けてください。

ありがとう、ジブ

4

5 に答える 5

9

クラスはA(公に)クラスから継承Bします:

class A: public B

パラメータを使用して基本クラスを初期化する唯一の方法は、初期化子リストを使用することです。

于 2009-12-03T20:29:38.850 に答える
0
class A: public B
{
public:
     A(bool r = true); // defaults parameter 1 as "true" if no arguments provided ex A *pA = new A();
     virtual ~A;

private:
}

.cpp

A::A(bool r) : B(r ? B::someEnumeration : B::anotherEnumeration)
{
  // calls parent class, and initialize argument 1 with some enumeration based on whether r is true or false
}

A::~A()
{
}
于 2009-12-03T20:39:20.117 に答える
0

これは、C ++で基本クラスのctorを呼び出す唯一の方法です。これは、のようなものがないためsuper()です。

于 2009-12-03T20:31:17.603 に答える
0
class A : public B
{
};

class B
{
  public:
  int x;
};

A は B からの派生型です。または、A は B を継承します。

だからこれは有効です...

A a;
a.x = 3;

コードの残りの部分は、A の構築時に B のコンストラクターを呼び出すだけです。

于 2009-12-03T20:34:45.470 に答える
0

コンストラクターは継承できないため、基本クラスのデータ メンバーは、派生クラス コンストラクターで引数を渡し、初期化リストを使用して初期化する必要があります。

また、ポリモーフィック クラスの場合、それぞれの仮想テーブルへ の vptr の初期化はコンストラクターでのみ行われる ことも知っておく必要があり ます。

于 2009-12-03T20:35:36.193 に答える