在根类中,虚拟的final方法比非虚拟的要好吗

Is virtual final method better than non-virtual one in a root class?

本文关键字:虚拟 方法 final      更新时间:2023-10-16

我有一个抽象类,它是类层次结构的根。这个根类有一个方法,它有一些琐碎的实现,似乎没有必要在任何时候、任何地方更改该实现。

使该方法成为非虚拟方法是可以的,但有可能某些子类会意外地重新实现它。在这种情况下,虚拟最终方法是更好的解决方案吗?

如果您决定将方法声明为virtual... final,您将让所有用户支付虚拟调度的运行时成本,以保护少数可能意外隐藏基类函数的用户。

由于C++的指导原则之一是"你不为你不使用的东西付费",我想说,最好让函数不虚拟,如果嘲笑者隐藏了函数,就让他们负责。

如果一个子类错误地重新实现了它,那么对象是否从基类访问也没关系。这个决定归结为多态性,你希望这个方法是多态的还是不多态的?,如果你这样做了,就把它变成虚拟的,如果你不这样做,那就不要。