在另一个类中声明一个带有自定义构造函数的类

时间:2013-06-13 00:32:11

标签: c++

我有一个类,其唯一的构造函数接受一个整数,我想在另一个类中使用它而不使它成为指针并使用new / delete。

这甚至可能吗?

头等舱的相关部分:

class A
{
  private:
  int size; 
  char *c;

  public:
  A(int i)
  {
    size = i;
    c = new char[i];
  }
  ~A() { delete[] c; }
}

我想在示例B类中使用它,如下所示:

class B
{
  private:
  A a(7); // Declaration attempt #1
  A b; //Declaration attempt #2
  A *c; //This is what I'll do if I have no other choice.

  public:
  B()
  {
    b = A(7); //Declaration attempt #2
    c = new A(7);
  }
}

1 个答案:

答案 0 :(得分:4)

使用()进行对象的类内初始化是不可能的,因为它被解释为函数声明。您可以使用member-initializer列表来执行此操作:

class B
{
    A a;

    public:
        B() : a(7)
    //      ^^^^^^
        {}
};

这也可以在构造函数中使用赋值,但建议使用成员初始化列表,因为初始化而不是赋值。

在C ++ 11中,您可以使用统一初始化:

class B
{
    A a{7};                                                                    /*
    ^^^^^^^                                                                    */

    public:
        B() = default;
};