如何调用嵌套类的构造函数

How to call constructor of a nested class

本文关键字:嵌套 构造函数 调用 何调用      更新时间:2023-10-16

首先,我不是在谈论像(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(将需要将特定的私有成员更改为受保护的,并以不希望的方式网格化它们的"名称空间")
  • memcpy() (A temp(_value); memcpy(&a, &temp, sizeof (A));)的可疑使用

不使用上述方法是否可行?

使用初始化列表

。B构造函数看起来像

class B {
   ...
   A a;
};
B::B(int _value) : a(_value) {
  ...
}