C ++阻止方法覆盖

时间:2015-11-19 20:19:11

标签: c++

在C ++中是否有任何方法可以像Java中的最终方法一样声明虚方法不可覆盖。

我知道通过使类的默认构造函数私有我可以使类最终,但只是虚方法呢?

由于

4 个答案:

答案 0 :(得分:2)

如果您将方法虚拟声明为:

virtual myMethod();

然后他们可以被覆盖。删除虚拟以使其“无法覆盖”

从C ++ 11开始,你也可以像这样使用final with virtual:

virtual myMethod() final;

Final keyword

答案 1 :(得分:1)

从C ++ 11开始,还有一个final关键字,可以在类和方法上使用。

据我所知,以前的版本无法做到这一点。

请参阅https://en.wikipedia.org/wiki/C%2B%2B11#Explicit_overrides_and_final

答案 2 :(得分:0)

尽管C ++ 11及更高版本允许将方法声明为final,但我敢说这不是一件好事。不要封锁你的班级!它的用户可能有创造性的场景,他们可能需要稍微调整一下。为什么剥夺他们这个选择?

如果你研究标准库的实现(在效率和风格方面都是非常好的编程的最好来源之一),你会发现成员永远不是最终的,也不是自己的成员。

答案 3 :(得分:0)

如何在C ++ 11之前在C ++版本中创建最终类: https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Final_Class