通过初始化列表调用另一个类的构造函数。有问题

时间:2012-07-20 17:32:56

标签: c++ class object constructor initializer-list

这是我的示例代码:

#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的对象基础调用该对象的构造函数并调用该对象的构造函数的正确方法是什么?

1 个答案:

答案 0 :(得分:7)

数据成员的初始化顺序遵循其声明顺序,而不是您列出其初始化程序的顺序。因此,Bar::base始终在Bar::qBar::s之前初始化 如http://ideone.com/M6iKR所示,对于Bar::Bar(int m, char n),使用basem初始化n可以正常工作。