2015-11-19 103 views
0

C++中有没有什么方法可以像Java中的final方法那样声明虚拟方法不可重写?C++预防方法覆盖

我知道通过使默认构造函数私人类我可以使类最终但那么只是虚拟方法呢?

感谢

+0

方法是默认情况下不重写。如果你不说他们可以被覆盖,他们不能。 – awksp

+2

我会对您的示例代码做出解释,但您似乎忘记了包含示例代码。 – kfsone

+0

@kfsone我不确定它是否需要这个问题。如果你在阅读理解方面挣扎,让我知道。我总是很乐意帮助他们发表绝对舌头和脸颊评论。这是一个帮助的地方,而不是践踏。 – Freddy

回答

2

如果你宣布你的方法虚拟像这样:

virtual myMethod(); 

然后,他们可以被覆盖。删除虚拟让他们 “非overidable”

由于C++ 11,你也可以用最终以虚拟像这样:

virtual myMethod() final; 

Final keyword

+0

有什么办法可以在C++ 03 – noname

+0

@noname中做到这一点通过不添加'虚拟的' –

0

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

如果你看看标准库的实现(在效率和风格方面真的很好的编程的最佳来源之一),你会看到成员永远不是最终的,也不是自己的。

+0

类设计师应该有一个很好的理由做出任何最终的决定,但有充足的理由去做。 [义务链接](https://isocpp.org/wiki/faq/strange-inheritance#final-classes) –

+0

还没有真正看到任何做出任何最终决定的好理由。 – SergeyA

+0

还没有看到它,所以它不存在?大企业有不同意的工程师。点击我的链接。 –