9

これは私のサンプルコードです:

#include <iostream>
using namespace std;

class Base
{
public:
    Base (int v, char z) {x=v;y=z;};
    int x;
    char y;
};

class Bar
{
public:
    Bar(int m, char n):q(m),s(n),base(q,s){};
    Base base;
    int q;
    char s;    
};

int main()
{
    Bar barObj(5,'h');    
    cout << barObj.base.x << barObj.base.y << endl;       
    return 0;
}

の出力が得られるのはなぜ0ですか? http://ideone.com/pf47j

class Baseまた、一般に、上記のオブジェクトベースの、内部で行われたように、別のクラスでメンバーオブジェクトを作成し、そのオブジェクトのコンストラクターを呼び出す正しい方法は何class Barですか?

4

1 に答える 1

8

データ メンバーの初期化順序は、初期化子をリストする順序ではなく、宣言の順序に従います。したがって、Bar::baseは常に および の前に初期化さBar::qBar::sます。http://ideone.com/M6iKR
に 示すように、 forを使用して初期化し、正常に動作します。Bar::Bar(int m, char n)basemn

于 2012-07-20T17:41:12.020 に答える