这是我的示例代码:
#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
的对象基础调用该对象的构造函数并调用该对象的构造函数的正确方法是什么?
答案 0 :(得分:7)
数据成员的初始化顺序遵循其声明顺序,而不是您列出其初始化程序的顺序。因此,Bar::base
始终在Bar::q
和Bar::s
之前初始化
如http://ideone.com/M6iKR所示,对于Bar::Bar(int m, char n)
,使用base
和m
初始化n
可以正常工作。