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

时间:2016-09-16 00:44:20

标签: c++ class memory-management constructor

首先,我不是在谈论这些问题(12)。我正在谈论一个已经有构造函数的类,它只是按值嵌套,而不是按定义嵌套......如果这有意义的话。

目前,我有这种方法可行,但使用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类(需要将特定的私有成员更改为受保护的,并且会以不受欢迎的方式将其"名称空间与#34;相互连接)
  • memcpy()A temp(_value); memcpy(&a, &temp, sizeof (A));
  • 的疑问使用

如果不采用上述方法,这可能吗?

1 个答案:

答案 0 :(得分:2)

您使用初始化列表。

即。 B构造函数看起来像

class B {
   ...

   A a;
};

B::B(int _value) : a(_value) {
  ...
}