C++;防止方法重写 在C++中,我们可以用任何方法来声明虚拟方法不可重写,就像java中的最终方法一样。

C++;防止方法重写 在C++中,我们可以用任何方法来声明虚拟方法不可重写,就像java中的最终方法一样。,c++,C++,我知道,通过将类的默认构造函数设为私有,我可以使类成为最终类,但虚拟方法又如何呢 如果您这样声明您的方法是虚拟的,请感谢: virtual myMethod(); virtual myMethod() final; 然后可以覆盖它们。删除虚拟磁盘以使其“不可重写” 从C++11开始,您还可以将final与virtual一起使用,如下所示: virtual myMethod(); virtual myMethod() final; 如果您这样声明您的方法是虚拟的: virtual myMe

我知道,通过将类的默认构造函数设为私有,我可以使类成为最终类,但虚拟方法又如何呢


如果您这样声明您的方法是虚拟的,请感谢

virtual myMethod();
virtual myMethod() final;
然后可以覆盖它们。删除虚拟磁盘以使其“不可重写”

从C++11开始,您还可以将final与virtual一起使用,如下所示:

virtual myMethod();
virtual myMethod() final;

如果您这样声明您的方法是虚拟的:

virtual myMethod();
virtual myMethod() final;
然后可以覆盖它们。删除虚拟磁盘以使其“不可重写”

从C++11开始,您还可以将final与virtual一起使用,如下所示:

virtual myMethod();
virtual myMethod() final;

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

据我所知,以前的版本不可能做到这一点


<> p/> p>从C++ 11开始,还有一个最终关键字,可以在类和方法上使用。

据我所知,以前的版本不可能做到这一点


请参见

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


如果您研究标准库实现(就效率和风格而言,这是真正优秀编程的最佳来源之一),您将看到成员永远不是final,类本身也不是。

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


如果你查看标准库实现(无论是在效率和样式上,真正优秀的编程的最佳来源之一),你都会看到成员不是最终的,也不是类本身的。

< P>如何在C++ 11之前在C++版本中制作最终类:
如何在C++ 11之前制作C++版本的最终类:

默认情况下,方法不可重写。如果你不说它们可以被重写,它们就不能被重写。我会对你的示例代码进行解释,但你似乎忘记了包含示例代码。@kfsone我不确定这个问题是否需要它。如果你在阅读理解上有困难,请告诉我。我总是很乐意帮忙,而不是在网上发表毫无保留的评论。所以这里是一个帮助的地方,而不是践踏的地方。@freddy所以有它的规则是有原因的,没有代码,海报总是很有可能模棱两可。你认为这是一种践踏,我认为这是一种轻松的帮助,以获得他需要的答案。请参阅Ceros的答案,这很好,但显然没有达到OP没有消除歧义的所有未指定标记。默认情况下,方法不可重写。如果你不说它们可以被重写,它们就不能被重写。我会对你的示例代码进行解释,但你似乎忘记了包含示例代码。@kfsone我不确定这个问题是否需要它。如果你在阅读理解上有困难,请告诉我。我总是很乐意帮忙,而不是在网上发表毫无保留的评论。所以这里是一个帮助的地方,而不是践踏的地方。@freddy所以有它的规则是有原因的,没有代码,海报总是很有可能模棱两可。你认为这是一种践踏,我认为这是一种轻松的帮助,以获得他需要的答案。看到Ceros的答案,这是好的,但显然没有击中所有未指定的标记,OP没有消除歧义。有没有办法做到这一点在C++中?03@noname通过不添加<代码>虚拟< /代码>,在C++中有什么方法可以做到这一点吗?03@noname通过不添加
virtual
,类设计器应该有一个很好的理由使任何东西成为最终结果,但有充分和正当的理由这样做。我真的没有看到任何好的理由去做最后的决定。没有看到它所以它不存在?大企业有不同意的工程师。点击我的链接。我已经阅读了链接,它不会告诉你为什么需要它。效率与否无关——你不必声明你的成员是虚拟的,也不必让他们成为最终成员。再次,请参见STL。至于对“切片”的恐惧,作为课堂作者,你不应该担心。类本身应该有正确定义的复制/赋值方法,其余的不是类作者的问题。你为什么要我捍卫一些行业标准?如果你想发表你显而易见的观点,那很好,但这并不能否定好的理由。用谷歌找到它们同样容易。C++常见问题解答是由重要的人维护的,他们认为最终类的存在有很好的理由。商业需求压倒一切,许多企业都需要最终课程。你反对切片的论点是无效的:切片是人们在实际生产代码中遇到的一个实际问题,这些类具有正确定义的复制/分配方法。类设计器应该有很好的理由使任何内容最终化,但有很好的理由这样做。我真的没有看到任何好的理由去做最后的决定。没有看到它所以它不存在?大企业有不同意的工程师。点击我的链接。我已经阅读了链接,它不会告诉你为什么需要它。效率与否无关——你不必声明你的成员是虚拟的,也不必让他们成为最终成员。再次,请参见STL。至于对“切片”的恐惧,作为课堂作者,你不应该担心。类本身应该有正确定义的复制/赋值方法,其余的不是类作者的问题。你为什么要我捍卫一些行业标准?如果你想发表你显而易见的观点,那很好,但这并不能否定好的理由。找到它们与G一样容易