这是我的示例代码:
#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
的对象 base 所做的那样,在 类栏
?
最佳答案
数据成员的初始化顺序遵循它们的声明顺序,而不是您列出它们的初始化程序的顺序。因此,Bar::base
总是在 Bar::q
和 Bar::s
之前初始化。
如图http://ideone.com/M6iKR ,对于 Bar::Bar(int m, char n)
,使用 m
和 n
初始化 base
工作正常.
关于c++ - 通过初始化列表调用另一个类的构造函数。有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11584251/