如何调用嵌套类的构造函数
首先,我不是在谈论这些问题(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
不采取任何论据) - 扩展类A(将需要更改特定私人成员保护和W乌尔德啮合他们的“命名空间”,在不希望的方式)
- 可疑使用
memcpy()
(A temp(_value); memcpy(&a, &temp, sizeof (A));
)
不诉诸于上述方法这是可能的?
您使用初始化列表。
I.e. B构造函数看起来像
class B {
...
A a;
};
B::B(int _value) : a(_value) {
...
}
'a'实际上是一个指针! –
@πάνταῥεῖOP正试图摆脱这种情况。 –
@πάνταῥεῖ - 他说我们想从指针改变它 –
使用引用成员和构造函数初始值设定项列表。 –
在这种情况下,参考文献对价值有什么优势?看起来两者都是在创建'B'时创建的,并且两者具有相同的用法语法和语义。 –
不,我可能刚刚把你的问题弄错了。 –