我有一个奇怪的情况,我希望能够定义ABC的一个子类可以覆盖的某些常量。ABC中的多态静态const成员变量?
struct A {
static const int a = 20;
virtual int func() = 0;
};
struct B : public A {
static const int a = 3;
int func() { return 5; }
};
struct C : public A {
static const int a = 4;
int func() { return 3; }
};
不幸的是,如果使用A *aPtr = new B
,aPtr->a
将返回20,代替3.
一个解决方法我看到的是单行函数(沿func
在上面示例中的行),但常量的语法在概念上更适合于这种特殊情况。是否有一种解析在运行时使用哪些常量的语法合理方式,其中调用代码在初始对象创建后不需要知道任何东西?
可能重复[覆盖静态变量时子类化](http://stackoverflow.com/questions/594730/overriding-static-variables-when-subclassing) –
想要这样做的原因可能是有缺陷的:一个常量应该很好,*常数*。它有时并不是恒定的,有时候还是别的。同样,静态成员是类的属性,而不是实例,所以它们在继承中不起作用,这是基于* instance *的概念。 –