您的位置:首页 > 其它

虚函数的类

2014-04-30 10:17 190 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/shawenkl/article/details/24772453

你认为这一计划将输出?

让我们看看这个过程是如何。首先,我们实例化一个类的对象。rbase是一个指针,我们设置为指向的对象的一部分。最后,我们称rbase getname()。rbase getname()。计算结果为::getname()。然而,一个::getname()是虚拟的,所以编译器将检查所有A和C之间的类是否能找到一个更衍生得到的匹配。首先,它检查B::getname(),并找到一个匹配。然后检查C::getname()和找到一个更好的匹配。它不检查D::getname()因为我们原来的对象是一个C,不是一个D。因此,rbase。getname()解决C::getname()。

因此,我们的程序的输出:

rbase是C

一个更复杂的例子

让我们看看另一个动物的例子我们的工作与在上一课。这里的原始类:

这是带虚函数的类:

请注意,我们不做动物::getname()虚拟。这是因为getname()是从来没有在任何派生类中重写,因此没有必要。

现在,使用虚拟speak()功能,下面的功能应正常工作:

事实上,这个程序产生的结果:

弗莱德说,喵

嘉宝说汪

当canimal。speak()评估程序,指出它是一个虚函数。在的情况下,ranimal指着一只猫的动物部分对象,程序会在所有的动物和猫之间的类是否能找到更多的衍生功能。在这种情况下,它发现猫::speak()。在的情况下,ranimal指出,狗的动物部分对象,程序解析函数的调用speak()狗:。

同样的,下面的数组的例子现在正常工作:


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: