让我们说我想将x和y初始化为0.在C&C的初始化列表中初始化B的最佳方法是什么?我对C ++ 03的这种做法更感兴趣。
typedef struct A
{
int x, y;
} A;
typedef struct B
{
A a;
} B;
class C
{
public:
C();
private:
B b;
};
--------
C::C(): b(??) {}
答案 0 :(得分:1)
这很简单:
C::C() : b() {}
请注意,在C ++中不需要typedef struct
技巧。 struct Name {blah};
就足够了。
答案 1 :(得分:1)
您的typedef struct
太多C-style
,您在C ++中不需要它。
无论如何,struct
可以包含非默认构造函数。
Here一个实例。
具有无默认构造函数的结构:
struct A {
A(int _x = 0, int _y = 0) : x(_x), y(_y) { }
int x, y;
};
struct B {
A a;
B(int x = 0, int y = 0) : a(x, y) { }
};
使用默认参数B::B()
将使用[x = 0; y = 0]
构建一个对象。
答案 2 :(得分:0)
在C ++ 03中,您可以在A和B构造函数中定义两个int。在C中,你调用B构造函数,只是将参数转发给A的构造函数。
答案 3 :(得分:0)
在您的示例中,A和B结构的行为类似于POD - 具有默认构造函数和复制赋值的对象以及显然是微不足道的析构函数。 在这种情况下,C ++允许通过将参数直接传递给成员来初始化这些对象(不使用用户定义的构造函数)。 例如:
A a1; // x and y initialized with default values (0 for int)
A a2{2}; // x initialized with 2, y with default
A a3{2, 4}; // x initialized with 2, y with 4
这也适用于C ++样式结构(没有typedef等)。 看这里http://en.cppreference.com/w/cpp/types/is_pod
<强>更新强> 在这种情况下,必须使用 {} 而不是()