【发布时间】:2012-06-10 13:10:05
【问题描述】:
我想要一个具有常量字段的基类(例如与类关联的唯一 ID,在编译后无法修改)。到目前为止,static const 声明就可以了。现在,我想继承这个基类,并确保这个类的子类确实有相同的字段,但有自己的值。我该怎么做?
假设,我想要一个名为 Base 的基类,其 ID 字段的 int 值为 0。然后,我想要类 A,@ 987654327@ 和 C,它们都是 Base 的公共子代,我想确保这些子代也有 ID 字段,其各自的值为 1、2 和 3(通过当然',我的意思是如果它们没有明确声明的 ID,则会出现编译器错误)。
如果我能设法构建这个场景,我的期望是请求Base* 指针的ID 字段,我应该得到不同的值,具体取决于指针是否创建为new A()、new B()或new C()。
我的猜测是将ID 声明为virtual static const,这当然没有意义并且会导致编译器错误。
但是我该怎么做才能达到所描述的结果呢? (我唯一能想到的是将ID 声明为一个返回整数的虚函数,然后将值硬编码到函数体中,但我正在寻找更优雅的东西。)
提前谢谢你!
【问题讨论】:
-
多态只对成员函数有效,对数据成员无效。
-
我已经写了一个基于模板的替代方案:stackoverflow.com/a/36797199/1529139
标签: c++ inheritance virtual constants static-members