c ++从模板派生的类如何调用模板的构造函数?

时间:2013-03-15 16:43:40

标签: c++ templates constructor template-specialization

我真的不知道如何调用这个帖子。 情况如下。我有一个模板类Array<T>

template <typename T> class Array{
private:
    T* m_cData;
    int m_nSize;
    static int s_iDefualtSize;
public:
    Array();
    Array(int nSize);
}

现在,我想编写一个派生自Array<T>的专门类,保存class Boxes的对象:

class Boxes{
private:
    double m_dFull;
public:
    Boxes(double dFull=0): m_dFull(dFull) {}
};

我是按照以下方式做到的:

class BoxesArray : public Array<Boxes>{
public:
    BoxesArray() : Array<Boxes>::Array() {}
    BoxesArray(int nValue) : Array<Boxes>::Array(nValue) {}
}

我添加了一些仅适用于Boxes的额外功能。好的,所以这里引起了混乱。调用ArrayBoxes()似乎实例化一个对象数组并“准备”这个对象来保存Box,对吧?但是在创建和对象ArrayBoxes之后,它是如何发生的(即,上面代码的哪一部分)我已经用Box填充了它?而且,第二个问题,我可以看到填充ArrayBoxes的这些Box是使用Boxes的默认构造函数构造的(Box m_dFull被设置为0)但是如果我想在默认情况下实例化ArrayBoxes呢? Boxes的参数化构造函数(例如,Boxes m_dFull = 0.5)?希望所有的编辑现在我的问题很清楚。

2 个答案:

答案 0 :(得分:0)

您需要将代码填充到数组中Boxes满足您在默认构造函数体中的要求,或者调用Array<Boxes>的非默认构造函数Boxes。 1}}您希望在成员初始化列表中拥有的实例。

答案 1 :(得分:0)

  

但是如何在创建和对象ArrayBox之后发生(即,上面代码的哪一部分)我已经用Box填充了它?

您的BoxesArray构造函数似乎调用了Array<Boxes>构造函数。即使没有,C ++也会暗中为你调用它。

  

并且,第二个问题,我可以看到填充ArrayBoxes的这些Box是使用Boxes的默认构造函数构造的(Boxes m_dFull设置为0)但是如果我希望使用参数默认情况下实例化ArrayBoxes Boxes的构造函数(比方说,Boxes m_dFull = 0.5)?

您需要在Array<T>中添加这样的构造函数: Array(int nsize, double defval);

在内部,您将使用调用默认值的框来构造数组。