C++ 如何调用嵌套类的构造函数
首先,我不是在谈论这样的问题(,)。我说的是一个已经有构造函数的类,它只按值嵌套,不按定义嵌套……如果这有意义的话 目前,我有这种方法,它是有效的,但使用了C++ 如何调用嵌套类的构造函数,c++,class,memory-management,constructor,C++,Class,Memory Management,Constructor,首先,我不是在谈论这样的问题(,)。我说的是一个已经有构造函数的类,它只按值嵌套,不按定义嵌套……如果这有意义的话 目前,我有这种方法,它是有效的,但使用了new,并且在我看来是丑陋的: class A { private: int value; public: A(int _value); }; class B { private: A *a; public: B(int _value); }; B的构造器: B::B(int _value) {
new
,并且在我看来是丑陋的:
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
,如何创建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(_值)
提供一个额外的构造函数才能不带参数)A
- 扩展类A(需要将特定的私有成员更改为受保护的成员,并以不需要的方式对其“名称空间”进行网格划分)
(memcpy()
)的使用有问题A temp(_值);memcpy(&A,&temp,sizeof(A));
不使用上述方法是否可行?您可以使用初始化列表 即B构造函数看起来像
class B {
...
A a;
};
B::B(int _value) : a(_value) {
...
}
a
实际上是一个指针@πάνταῥεῖ 这正是OP想要摆脱的。@πάνταῥεῖ - 他说我们想把它从指针@πάντα改过来ῥεῖ 他为什么需要推荐人?@πάνταῥεῖ 你在说什么?我希望a
是一个值(a
),而不是指针(a*
),也不是引用(a&
)。这个答案回答了我的问题,并给出了我想要的答案。案例结束。使用引用成员和构造函数初始值设定项列表。在这种情况下,引用比值有什么优势吗?似乎两者都是在创建aB
时创建的,并且都有相同的用法语法和语义。不,我可能只是把你的问题搞错了。@BradenBest如果你没有理由使用引用,请不要。一个普通的A
无疑是您在这里想要的。