首先,我不是在谈论这些问题(1,2)。我正在谈论一个已经有构造函数的类,它只是按值嵌套,而不是按定义嵌套......如果这有意义的话。
目前,我有这种方法可行,但使用new
并且是丑陋的IMO:
class A {
private:
int value;
public:
A(int _value);
};
class B {
private:
A *a;
public:
B(int _value);
};
B的构造函数:
B::B(int _value)
{
a = new A(_value);
}
如果我要将A *a;
更改为A a
,我将如何创建B
,以便以相同的方式调用A
的构造函数?
我试过了:
B::B(int _value)
{
a = A(_value); // no matching function for call to ‘A::A()’
a = A::A(_value); // cannot call constructor ‘A::A’ directly
a(_value); // no match for call to ‘(A) (int&)’
a.A(_value); // invalid use of `A::A`
}
没有:
似乎没有可能new
void A::init(_value)
(需要A
的额外构造函数才能不参数)memcpy()
(A temp(_value); memcpy(&a, &temp, sizeof (A));
)如果不采用上述方法,这可能吗?
答案 0 :(得分:2)
您使用初始化列表。
即。 B构造函数看起来像
class B {
...
A a;
};
B::B(int _value) : a(_value) {
...
}