使用基类指针在派生类中调用非虚函数

joh*_*ers 1 c++ polymorphism

正如这个答案所述:

高度依赖dynamic_cast通常表明您的设计出了问题.

我想知道的是如何在派生类中调用自定义函数,在基类中没有相同名称的函数,但是使用基类指针也是如此,dynamic_cast如果实际上没有更好的方法.

如果这个函数是两者中定义的虚函数,那很容易.但这只是派生类中的一个独特函数.

也许dynamic_cast是毕竟最好的方式?

And*_*rew 5

为了调用Derived类的函数,你必须获得一个指向派生类的指针.作为一种选择(取决于具体情况)你可能想要使用static_cast而不是dynamic,但正如你所说:

it is often an indication your design has gone wrong

此外,有时我认为使用演员表是可以的.当我为游戏设计GUI库时,它有一个基类Widget和许多子类.在编辑器中进行了实际的窗口布局,后来一些Loader类正在膨胀这个布局.为了从布局中填充小部件以及每个小部件数据的实际特定(与游戏相关),我提出了一种方法,用于从小部件中查询小部件的子节点.此功能重新调整Widget*,然后我将dynamic_casted其转换为实际类型.我还没有找到更好的设计.

后来我也发现GUI系统的Android工作方式相同