派生 class 可以在 class 声明中定义基本 class 数组的大小吗?
Can a derived class define size of base class array in class declaration?
我有一个抽象 class,它有一个数组数据成员,但大小只有派生 class 知道。
这是静态常量理想的class声明之外的赋值,还是有办法指定这个常量数据成员必须由派生的classes定义?有没有办法让基础 class 数组成为一个合适的数组,而不是一个动态数组?
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> {
};
如果这样声明,Edge()
和 ~Edge()
将为每个数组元素调用。
我有一个抽象 class,它有一个数组数据成员,但大小只有派生 class 知道。
这是静态常量理想的class声明之外的赋值,还是有办法指定这个常量数据成员必须由派生的classes定义?有没有办法让基础 class 数组成为一个合适的数组,而不是一个动态数组?
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> {
};
如果这样声明,Edge()
和 ~Edge()
将为每个数组元素调用。