我有一个“覆盖”静态数组的棘手问题。我已经得到了静态数组(为简单起见),它们在不同的派生类中具有固定的长度,但是所有大小在编译时都是已知的。我在基类中也有一个虚函数,但是我不知道如何解决在派生类中覆盖这些数组和数组大小的问题,以便该虚函数可以正常工作,即给出大小和数组派生类的内容。例:
class B {
private:
// these two are not really meaningful in this class (ABC)
static const int n = 1;
static double da[n];
public:
virtual void f()
{
for(int i = 0; i < n; ++i)
{
// do something with n and da
std::cout << n << std::endl;
}
}
};
class D1 : public B {
private:
// these are subclass-specific (i.e. n might also change)
static const int n = 4;
static double da[n];
};
class D2 : public B {
private:
// these are subclass-specific (i.e. n might also change)
static const int n = 6;
static double da[n];
};
double D1::da[] = {1., 2., 3., 4.};
// ...
int main()
{
B *p = new D;
p->f(); // I'd like to see 4 instead of 1
}
您能否提出解决方法或正确执行此操作的其他方法?我认为std :: vector可以做到(?),但需要大量工作来适应我现有的代码。
非常感谢,
彼得
最佳答案
由于f仅在基类中定义,因此它将使用该类的n变量。
也许移动:
for(int i = 0; i < n; ++i)
{
// do something with n and da
std::cout << n << std::endl;
}
转到一个单独的函数,而是使用它,以便您传递“ n”是什么。喜欢
void doStuff(int num) {
for(int i = 0; i < num; ++i)
{
// do something with n and da
std::cout << num << std::endl;
}
}
并且让每个子类实现f()来调用doStuff(n),其中n将是每个类自己的n变量。