C++ 派生类能否在类声明中定义基类数组的大小?
我有一个抽象类,它有一个数组数据成员,但大小只有派生类知道 这是静态常量理想的类外声明赋值,还是有办法指定此常量数据成员必须由派生类定义?有没有办法使基类数组成为正确的数组,而不是动态数组C++ 派生类能否在类声明中定义基类数组的大小?,c++,arrays,dynamic-arrays,C++,Arrays,Dynamic Arrays,我有一个抽象类,它有一个数组数据成员,但大小只有派生类知道 这是静态常量理想的类外声明赋值,还是有办法指定此常量数据成员必须由派生类定义?有没有办法使基类数组成为正确的数组,而不是动态数组 class Edge { // composed of other objects } class Polygon { public: Polygon() { edges = new Edge*[NUM_FACES]; // Go on to populate
class Edge {
// composed of other objects
}
class Polygon {
public:
Polygon() {
edges = new Edge*[NUM_FACES];
// Go on to populate array
}
protected:
static const int NUM_FACES;
Edge** edges;
}
const int Rectangle::NUM_FACES = 4;
class Rectangle : public Polygon {
public:
Rectangle() : Polygon() {}
}
const int Triangle::NUM_FACES = 3;
class Triangle : public Polygon {
public:
Triangle() : Polygon() {}
}
定义析构函数时是否需要遍历数组以删除其元素,还是由默认构造函数处理
template <unsigned int NUM_EDGES>
class Polygon {
...
private:
Edge[NUM_EDGES] e;
};
class Triangle : public Polygon<3> {
};
模板
类多边形{
...
私人:
边[NUM_EDGES]e;
};
类三角形:公共多边形{
};
如果这样声明,将为每个数组元素调用
Edge()
和~Edge()
。您有许多不同的问题。如果可能的话,试着只选一个。你的类不包含数组。到处都是指针,但没有数组。模板的问题是多边形
和多边形
是两种完全不同的类型。也许一个好的优化编译器可以发挥某种魔力来最小化影响,但一般来说,你创建的是不同的类型,如果有不同的多边形类型,就会导致代码膨胀。@PaulMcKenzie哦,它们必须是不同的类型,因为它们的大小不同!如果需要,可以将边计数设置为不可知的PolygonBase
,并从中继承Polygon
。