【发布时间】:2012-02-08 02:56:42
【问题描述】:
C++11 中final 关键字用于函数的目的是什么?我知道它可以防止派生类覆盖函数,但如果是这种情况,那么将 final 函数声明为非虚拟还不够吗?我还有什么遗漏的吗?
【问题讨论】:
-
"将您的“最终”函数声明为非虚拟还不够" 不,无论您是否使用
virtual关键字,覆盖函数都是隐式虚拟的. -
@ildjarn 如果它们没有在超类中被声明为虚拟,那是不正确的,你不能从一个类派生并将非虚拟方法转换为虚拟方法..
-
@DanO 我认为你不能覆盖,但你可以用这种方式“隐藏”一个方法..这会导致很多问题,因为人们并不打算隐藏方法。
-
@DanO :如果它在超类中不是虚拟的,那么它就不会被“覆盖”。
-
再次,“overriding”在这里有一个特定的含义,就是赋予虚函数多态行为。在您的示例中,
func不是虚拟的,因此无需覆盖任何内容,因此无需将其标记为override或final。