我有一个“覆盖”静态数组的棘手问题。我已经得到了静态数组(为简单起见),它们在不同的派生类中具有固定的长度,但是所有大小在编译时都是已知的。我在基类中也有一个虚函数,但是我不知道如何解决在派生类中覆盖这些数组和数组大小的问题,以便该虚函数可以正常工作,即给出大小和数组派生类的内容。例:

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变量。

09-30 14:36
查看更多