虚拟功能的好处

时间:2015-09-07 14:59:46

标签: override virtual

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

但是,我仍然没有看到使功能成为虚拟的好处。为什么不在必要时使其具体并覆盖功能?

1 个答案:

答案 0 :(得分:0)

您链接中的所有答案都非常复杂,因为他们实际上回答的问题多于实际问题: - )

我试着让它更容易(让我们希望最好):

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

示例:如果您有"孩子 - >父"和"孙子 - >孩子 - >父"具有完全相同的函数f2()定义和所有虚拟,您现在可以假设"孙子:: f2"在任何情况下都被召唤。如果你省略了"虚拟"在父级中,您将调用不同的函数,具体取决于您用于访问实例的指针。

因此。这对什么有用?想象一下,您有一个基于模板的集合,并希望将子项放在定义为父类型集合list<Parent*>的集合中。如果现在调用从列表中获取的元素上的函数,则可以期望调用子函数(定义)!如果省略&#34;虚拟&#34; f2()定义中的关键字将调用parent函数,在大多数情况下这可能是意外/不期望的。

还好吗? : - )