【发布时间】:2011-09-26 09:56:26
【问题描述】:
我有一个相当奇怪的情况,我希望能够定义一些 ABC 的子类可以覆盖的常量。
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 行),但从概念上讲,常量的语法更适合这种特殊情况。是否有一种语法上合理的方法来解析在运行时使用哪些常量,而调用代码在初始对象创建后不需要知道任何内容?
【问题讨论】:
-
想要这个的原因可能是有缺陷的:一个常量应该是,嗯,constant。它有时不是恒定的,有时是其他的。同样,静态成员是类的属性,而不是实例,因此它们在继承中没有任何作用,这是一个基于 instance 的概念。
标签: c++ static polymorphism constants