虚拟最终方法比根类中的非虚方法更好吗?

时间:2014-10-22 10:25:06

标签: c++ c++11

我有一个抽象类,它是类层次结构的根。该根类有一个方法,有一些简单的实现,似乎没有必要随时随地改变该实现。

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

2 个答案:

答案 0 :(得分:1)

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

由于C ++中的指导原则之一是don't pay for you don't使用了什么,"我认为最好让函数保持非虚拟状态,如果隐藏函数,派生者应该负责。

答案 1 :(得分:0)

如果一个子类错误地重新实现它,那么如果该对象是从基类访问则无关紧要。这个决定归结为多态,你想要这个方法是多态的吗?如果你这样做,那就把它变成虚拟的,如果你不这样做,那就不要了。