【问题标题】:Benefits of Virtual Function虚拟功能的好处
【发布时间】:2015-09-07 14:59:46
【问题描述】:

答案 “调用非虚函数将使用与指针类型相同的类中的函数,无论对象是否实际创建为其他派生类型。而调用虚函数将使用原始分配的对象类型中的函数,无论您使用哪种指针。” 在问题链接中对我来说是最好的 What are the differences between overriding virtual functions and hiding non-virtual functions?

但是,我仍然没有看到将函数设为虚拟的好处。为什么不把它具体化并在必要时覆盖函数?

【问题讨论】:

    标签: overriding virtual


    【解决方案1】:

    链接中的所有答案都非常复杂,因为它们实际上回答的问题比实际提出的要多:-)

    我尽量让它变得更容易(希望最好):

    虚函数的概念允许您保证在涉及一些继承的类上使用任何指针(参见链接Parent* p2Child* cp 中的示例),它将始终调用“最小”孩子的在继承链中实现。

    示例:如果您有“child -> parent”和“grandchild -> child -> parent”,它们具有完全相同的函数f2() 定义并且都是虚拟的,您现在可以假设“grandchild::f2”被调用所有情况。如果您在父项中省略了“virtual”关键字,则会调用不同的函数,具体取决于您用于访问实例的指针。

    所以。这有什么用?假设您有一个基于模板的集合,并且希望将子集合放入定义为父类型集合list<Parent*> 的集合中。如果您现在在从列表中获取的元素上调用函数,则可以期望调用子函数(定义)!如果您在 f2() 定义中省略了“virtual”关键字,则会调用 parent 函数,这在大多数情况下可能是意外/不希望出现的。

    好点了吗? :-)

    【讨论】:

      猜你喜欢
      • 2014-05-12
      • 1970-01-01
      • 1970-01-01
      • 2019-06-14
      • 1970-01-01
      • 2012-08-21
      • 1970-01-01
      • 2011-03-29
      • 1970-01-01
      相关资源
      最近更新 更多