在C ++中是否有任何方法可以像Java中的最终方法一样声明虚方法不可覆盖。
我知道通过使类的默认构造函数私有我可以使类最终,但只是虚方法呢?
由于
答案 0 :(得分:2)
如果您将方法虚拟声明为:
virtual myMethod();
然后他们可以被覆盖。删除虚拟以使其“无法覆盖”
从C ++ 11开始,你也可以像这样使用final with virtual:
virtual myMethod() final;
答案 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