我有一個奇怪的情況,我希望能夠定義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 *的概念。 –