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;
}

为什么我得到输出0http://ideone.com/pf47j

另外,一般来说,在另一个类中创建成员对象并调用该对象的构造函数的正确方法是什么,就像上面对class Base, inside的对象基所做的那样class Bar

4

1 回答 1

8

数据成员的初始化顺序遵循其声明顺序,而不是您列出其初始化程序的顺序。因此,Bar::base总是在Bar::q和之前初始化Bar::s
http://ideone.com/M6iKR所示,for Bar::Bar(int m, char n),初始化base使用m并且n工作正常。

于 2012-07-20T17:41:12.020 回答