【发布时间】:2012-09-14 15:26:50
【问题描述】:
我有一个父类“base”和另一个继承自“base”的“派生”类。
“派生”有1个方法cH1。
如果我这样做:
base* b = new derived();
我希望能够做到这一点:
b->cH1();
显然我不能,有两种解决方案:
- 要么将 cH1 声明为 base 中的纯虚拟。
-
或者这样做:
dynamic_cast<derived*>(b)->cH1();
哪个是更好的做法?
【问题讨论】:
-
请关闭大写锁定键;
PARENT暗示名字是宏;parent是常用的用法。 -
我想说,你脑子里最大的问题可能是“父母”和“孩子”这两个词的使用。对于基类和派生类,这些是非常糟糕的隐喻:通常来说,子类通常不是父类,也不是更具体的父类实例。一个更好的比喻是“基类”和“派生类”。
-
@PeteBecker 和@KerrekSB:很好的建议。此外,我建议将
cH1(对于通用方法名称有点晦涩和奇怪)更改为m1或method1。
标签: c++ dynamic-cast