0

我真的不知道如何调用这个线程。情况如下。我有一个模板类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()似乎实例化了一个对象数组并“准备”这个对象来保存盒子,对吧?但是它是如何发生的(即,上面代码的哪一部分)在创建和对象之后ArrayBoxes我已经用 Boxes 填充了它?而且,第二个问题,我可以看到填充 ArrayBoxes 的这些 Boxes 是使用 Boxes 的默认构造函数构造的(Boxesm_dFull被设置为 0),但是如果我希望使用 Boxes 的参数构造函数默认实例化 ArrayBoxes 怎么办(给,比如说,盒子m_dFull = 0.5)?希望所有的编辑我的问题现在都清楚了。

4

2 回答 2

0

您需要Boxes在默认构造函数的主体中放入满足您要求的代码来填充数组,或者调用一个非默认构造函数,Array<Boxes>该构造函数采用Boxes您希望在成员初始化列表中拥有的实例。

于 2013-03-15T16:50:32.343 回答
0

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

看来您的BoxesArray构造函数调用Array<Boxes>构造函数。即使没有,C++ 也会为您隐式调用它。

而且,第二个问题,我可以看到填充 ArrayBoxes 的这些 Boxes 是使用 Boxes 的默认构造函数构造的(Boxes m_dFull 被设置为 0),但是如果我希望使用 Boxes 的参数构造函数默认实例化 ArrayBoxes 怎么办? (例如,盒子 m_dFull = 0.5)?

您需要像这样添加一个构造函数Array<T>Array(int nsize, double defval);

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

于 2013-03-15T23:05:01.670 回答