在父类的构造函数中调用元素对象的构造函数

时间:2012-05-17 09:56:21

标签: c++ constructor parent-child

问题更新:

我想在C ++中执行以下操作:

struct Param {
public:
    int len;
    int in1;
    float in2;
};

Param params;

class Element {
private:
    int value1;
    float value2;
public:
    Element();
    Element(int n) {value1 = n; value2 = 0;}
    Element(int n1, float n2) {value1 = n1; value2 = n2;}
}

class Parent {
private:
    class Element elem;
    vector<Element> elemVec;
public:
    Parent();
    Parent(int n);
}

我希望编写以下构造函数,以便在调用Parent构造函数时,类元素elemelemVec的非默认构造函数也会被调用。我已经发现elem的构造函数需要调用如下:

Parent::Parent(int n) : elem(n) {

}

我现在如何构造elemVec向量的每个元素,以便为每个向量元素调用Element(int, float)构造函数,并从结构中获取intfloat个值字段params.value1params.value2elemVec的大小需要由结构字段params.len定义。

在构造函数体中编写循环会给出构造对象的不需要的行为。

2 个答案:

答案 0 :(得分:5)

以下实施应该有效。但是,它取决于从intElement的隐式转换,并不是一般解决方案。

Parent::Parent(int n, const vector<int> &numVec)
    : elem(n),
      elemVec(numVec.begin(), numVec.end())
{ }

答案 1 :(得分:1)

此解决方案可以满足您的需求:

Parent::Parent(int n, const vector<int>& numVec)
    : elem(n)
{
    elemVec.reserve(numVec.size());
    for (auto num : numVec)
        elemVec.emplace_back(num);
}

空矢量的默认构造基本上是免费的。

保留分配了vector(n)构造函数所需的完整内存块。

emplace_back尽可能高效地构建项目。