我真的不知道如何调用这个帖子。
情况如下。我有一个模板类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
)?希望所有的编辑现在我的问题很清楚。
答案 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);
在内部,您将使用调用默认值的框来构造数组。