【发布时间】:2013-03-15 16:43:40
【问题描述】:
我真的不知道如何调用这个线程。
情况如下。我有一个模板类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 的默认构造函数构造的(Boxes m_dFull 被设置为 0)但是如果我希望 ArrayBoxes 默认使用参数构造函数实例化呢?盒子(例如,盒子m_dFull = 0.5)?希望所有的编辑我的问题现在都清楚了。
【问题讨论】:
-
你不必调用你父类的默认构造函数,它会被隐式调用。
-
Array<T>的默认构造函数是做什么的?我们能看到吗?听起来您也不清楚继承的含义。ArrayBoxes是一个Array<Boxes>,所以无论你在Array<Boxes>默认构造函数中所做的一切都会影响ArrayBoxes。 -
考虑到
Array<Boxes>::Array()没有参数,我正在努力理解为什么ArrayBoxes() {}不起作用,
标签: c++ templates constructor template-specialization