class ship
{
private:
static const int num1 = 5;
static const int num2 = 5;
protected:
virtual int getNum1(){
return num1;
}
int mainArray[getNum1()][num2];
}
基本上我想为一个静态const变量做一个getter,这个getter稍后会被用来初始化它下面的数组。我怎样才能做到这一点? (我在上面的当前代码中遇到了很多错误,它只是为了更好地演示我的问题)。我希望能够拥有一个继承自此类的类,并使用虚拟getter更改数组的大小。 提前感谢任何答案!
答案 0 :(得分:3)
使你的静态const int公开。因为它是const,无论如何都没有人可以改变它,编译器会理解......
class Ship
{
public:
static const int num2 = 5;
};
static float myArray[Ship::num2];
正如问题的评论部分所述,需要有一些不同的内部阵列大小的船舶。试图覆盖虚函数来获取大小,数组应该不起作用。 这是一个基于模板的版本,其中这些类仍然可以以多态方式使用。
class IShip
{ virtual void Sink() = 0; // and so on. Anything those classes have in common...
};
template<int xDim, int yDim>
class SomeShip
: public IShip
{
static const int num1 = xDim;
static const int num2 = yDim;
int mainArray[xDim][yDim];
public:
// Implementation of IShip...
};
typedef SomeShip<5,5> Ship;
typedef SomeShip<10,5> Bigship;
Bigship myBigShip;
void HandleShip( IShip * ship ) { ... }
答案 1 :(得分:0)
我不认为你可以通过初始化阵列的getter来完成你想要的任务。为什么不在那里使用num1
呢?此外,您可以在static
之前添加关键字int getNum1()
- 如果您决定保留该方法。