c – 为什么我们必须声明虚拟方法

假设我们有一个类,“动物”和子类,“猫”和“狗”.

让我们说当我们将对象传递给任何“动物”的中间函数时,我们想让“猫”和“狗”都发出声音(猫:“喵” – 狗:“woof”).

为什么我们必须使用虚拟方法来执行此操作?难道我们不能在没有在“动物”中定义虚拟方法的情况下执行Animal-> makeNoise()吗?由于“猫”和“狗”都是动物,难道不清楚“makeNoise()”是指传递给函数的动物吗?

这仅仅是语法问题还是更多内容?我很确定在Java中我们不必这样做.

最佳答案
在Java中,默认情况下所有成员函数都是虚拟的(静态,私有和最终成员除外).

在C中,默认情况下所有成员函数都是非虚拟的.使函数虚拟增加了开销 – 运行时和对象大小 – 并且C哲学不支付您不使用的内容.我的大多数对象都不是多态的,所以除非我需要,否则我不应该为多态而付费.由于您需要Animal :: makeNoise()为虚拟,因此必须明确指定它.

转载注明原文:c – 为什么我们必须声明虚拟方法 - 代码日志