【问题标题】:Initialize array of class objects in constructor of another class在另一个类的构造函数中初始化类对象数组
【发布时间】:2011-12-22 04:51:14
【问题描述】:

如果我有课:

class A
{
private:
     char z;
     int x;

public:
     A(char inputz, int inputx);
     ~A() {}
}

我想在B 类中创建一个A 数组。

class B
{
private:
    A arrayofa[26];

public:
    B();
    ~B() {}
    void updatearray(); // This will fill the array with what is needed.
}


class B
{
    B:B()
    {
        updatearray();
        std::sort( &arrayofa[0], &arrayofa[26], A::descend );
    }
}

如何在B的构造函数中显式初始化arrayofa

【问题讨论】:

  • 在构造函数中构建对象通常是个坏主意。你的目标到底是什么?
  • 什么是A::descend?降序排序的常规方法是为类定义正常的比较运算符,然后使用std::greater

标签: c++ arrays data-structures


【解决方案1】:

将自动调用默认构造函数(对于非 POD)。如果您需要不同的构造函数,那您就不走运了,但您可以使用 vector 代替它来支持您的需求。

【讨论】:

    【解决方案2】:

    你不能。

    数组中的每个元素都会被默认构造函数初始化(无参构造函数)。

    最好的选择是使用向量。
    在这里,您指定一个将被复制构造到向量的所有成员中的 a 值:

    class B
    {
    private:
         std::vector<A> arrayofa;
    public:
         B()
            : arrayofa(26, A(5,5))
              // create a vector of 26 elements.
              // Each element will be initialized using the copy constructor
              // and the value A(5,5) will be passed as the parameter.
         {}
         ~B(){}
         void updatearray();//This will fill the array with what is needed
    }
    

    【讨论】:

      【解决方案3】:

      首先应该有一个class A 的默认构造函数,否则B() 将无法编译。它会在构造函数的主体开始执行之前尝试调用class B成员的默认构造函数。

      你可以像这样初始化arrayofa

      void B::updatearray()
      {
          arrayofa[0] = A('A', 10);
          arrayofa[1] = A('B', 20);
          ...
      }
      

      最好使用std::vector而不是数组。

      std::vector<A> v(26, A('a', 10)); //initialize all 26 objects with 'a' and 10
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-08
        • 2021-11-06
        • 2013-06-04
        • 1970-01-01
        • 2019-11-21
        • 2023-02-02
        • 1970-01-01
        • 2013-12-30
        相关资源
        最近更新 更多