草庐IT

override

全部标签

java - @override 注解

谁能告诉我这段代码是否:publicclassOvTester{@OverridepublicinthashCode(){returntoString().hashCode();}}确定OvTester类中的toString方法覆盖其父类(superclass)中的toString方法。我想知道这是否属实,如果属实,它是如何运作的?如果这不是真的,那么这是真的吗:“OvTester中的hashCode()方法必须覆盖其父类(superclass)中的同名方法”?如果那不正确,那什么是正确的? 最佳答案 当您在子类中重新定义具有相同签

c++ - 如何将 override 关键字添加到大型 C++ 代码库?

我有一个包含数千个源文件的大型C++代码库。我想在适当的地方添加override关键字。我的一些明显被覆盖的函数实际上并没有覆盖基类中的任何函数,我想捕获这些或至少让它们脱颖而出。我尝试手动执行,但代码库太大。我尝试使用clang-modernize,但它没有提供有用的说明。我还担心它无法理解为VisualStudio编写的代码库。如何在不花费人工周或更多时间的情况下将override关键字添加到我的代码库中? 最佳答案 似乎clang-modernize已经进入了clang-tidy这支持这一点。示例代码(test.cpp):st

c++ - C++ 检查关键字是否存在

我正在编译一个使用C++关键字“override”的C++程序。我在VisualStudio2010中编译成功,但现在我需要在g++上编译它。只有g++4.6可用(您需要g++4.7才能支持“覆盖”)。真正的解决方案是安装g++4.7(现在正在发生),但这让我开始思考。是否有编译时检查以查看关键字是否受支持?我试过:#ifndefoverride#defineoverride#ifdefBUILD_WINDOWS#pragmamessage("The\"override\"keywordisnotsupportedonthiscompiler!Ignoringit!")#else#wa

c++ - 带有尾随返回类型的 final、override、const 的语法

我正在尝试覆盖虚拟,但也使用关键字override、final和const,以及尾随返回类型。问题似乎出在派生类中,编译器错误(说我没有指定尾随返回类型)并没有太大帮助。代码在这里:https://wandbox.org/permlink/zh3hD4Ukgrg6txyE也贴在下面。我玩过不同的顺序,但似乎仍然无法正确处理。任何帮助将不胜感激,谢谢。#includeusingstd::cout;usingstd::endl;usingstd::ostream;////////////////////////////////////////////////BasestuffclassBa

c++ - 为什么 GCC 给我一个错误 : no unique final overrider?

在下面的代码中,我收到以下警告和错误:test.cpp:15:warning:directbase'B'inaccessiblein'D'duetoambiguitytest.cpp:15:error:nouniquefinaloverriderfor'virtualvoidA::f()'in'D'但是如果我从A中移除B的虚拟继承(即structB:publicA),我只会得到警告,没有错误。structA{virtualvoidf()=0;};structB:publicvirtualA{voidf(){}};classC:publicB{};structD:publicC,virt

c++ - 同时支持C++98和C++11

我开始重写大量必须适用于多种操作系统/编译器组合的代码。有些支持C++11,有些只支持C++98/C++03。我正在寻找一种能够在代码中使用一些C++11功能的方法。我主要感兴趣的是override、noexcept和final。换句话说,实际上没有C++98/03等效项的语法小功能。我并没有像What'stheC++98equivalentoftheautoiteratorreference?中那样使用ifdef尝试在范围for循环中硬塞进.这太笨拙了。我最初的想法是使用预处理器来做这样的事情:#if__cplusplus>201103L#defineOVERRIDEoverride

c++ - 在 C++ 中查找紧密成员函数名称

我刚刚遇到了一个错误(我自己造成的!),表现如下。我有一个带有虚拟成员函数的类,我需要通过为一些新用例添加一个额外的参数来扩展它。我用默认值添加了它,这样它就不会中断任何当前调用。我错过的是,还有另一个类继承自此类,该类具有对该函数的覆盖,但不再是覆盖。虽然我知道override关键字来避免在添加新代码时出现这种情况,我想知道是否有任何方法可以找到词法上足够接近的所有函数,从而可能出现类似的错误。曾经做过一次,我有可能在过去的某个时间做过,并且想回顾性地检查代码库。 最佳答案 Clang有警告标志-Woverloaded-virtu

c++ - 为什么必须将 "virtual"放入基类而不是仅在子类中使用 "override"?在 C++ 中

标题几乎说明了一切。为什么要在基类中定义以后可能重写的函数?如果您想从中派生出不同行为的版本,那么您必须修改基类,并且您还没有考虑过将基类中的特定函数标记为虚拟。据我所知,您通过使用override解决了java中的此类抽象定义,这对我来说似乎更自然(尽管到目前为止我只关注java)。c++中的这种扭曲是为了强制程序员提前思考,还是有技术原因导致它这样工作? 最佳答案 这样做是为了使成员函数成为虚函数的决定保留在基类中。决定将一个函数设为虚函数会对设计产生影响:如果你将一个函数设为虚函数,你必须考虑它执行不同操作的可能性。相反,您可

c++ - 哪个更好 : Function overriding or passing a function pointer for event handling

因此,我正在为一个类编写代码,该类将进入一个供其他人使用的库。此类将拦截和处理传入的消息(细节并不重要,但它使用activemq-cpp库)。这个消费类的轮廓是classMessageConsumer{...public:voidrunConsumer();virtualvoidonMessage(constMessage*message);}其中runConsumer()建立连接并开始监听,并在收到消息时调用onMessage()。我的问题是:使用此代码的人将各自有自己的方式来处理不同的消息。我怎样才能保持MessageConsumer通用但提供这种灵active,同时保持代码简单?

c++ - 确保一个类不是抽象的

当我更改虚方法的签名时,这种情况经常发生,即继承类变为抽象类。这可能会导致在显然完全不相关(与原始更改)的位置出现(令人困惑的大)错误消息。在这些消息的某处,我读到“Fooisabstract”。但是解析这些错误信息是乏味的。有没有办法强制类不是抽象? 最佳答案 您可以使用overridespecifier指定派生类中的方法覆盖基类中的抽象方法。当您更改基类中方法的签名时,override指定的方法应该会导致明显的编译器错误,因为它不再覆盖基类方法。 关于c++-确保一个类不是抽象的,我