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

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

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

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

最佳答案

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

关于c++ - 通过初始化列表调用另一个类的构造函数。有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11584251/

相关文章:

安卓NDK : How to get a Class Loader With a NativeActivity and native_app_glue?

C++ 异常开销和抛出指令

javascript - 在 Firefox 中使用 JavaScript 在 iframe 中打印 PDF

javascript - 这是将多级深层对象数组转换为简洁对象数组的好方法吗?

python - 对象在 Python 2.7.6 中被视为 NoneType

c++ - 在 C++ 中实现 Matlab 语法

c++ - 如何在 C++ 中取消对 grpc::ClientReader 的 Read() 调用?

python - PyQt 从另一个类访问属性

c++ - 实例化一类库对象?

C# 带有成员的静态成员类