Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 派生类能否在类声明中定义基类数组的大小?_C++_Arrays_Dynamic Arrays - Fatal编程技术网

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