我刚刚在一个非平凡的代码库中更改了一堆虚拟方法,以支持64位可移植性。我已经通过代码库进行了大量搜索,寻找需要编辑的派生类来更改虚函数参数类型。不幸的是,编译器(VS2013)并没有警告我函数的派生类版本的类型错误并且不会被调用。我一直在寻找我错过的实例。除了非常彻底,我还想在它上面运行一个工具,为我做所有的检查。
这样的工具是否存在?
答案 0 :(得分:3)
有一个更简单的解决方案:使用override
specifier。如果将override
添加到子类虚函数的末尾,当您更改基类虚函数的参数时,除非您更改子类虚函数,否则会出现编译错误。
您还可以使用final
specifier来指示子类无法实现虚函数。
答案 1 :(得分:2)
启用warning C4263,由于某些奇怪的原因,默认情况下即使在/ W4也会被禁用。
'功能' :member function不会覆盖任何基类虚拟成员函数
类函数定义与基类中的虚函数具有相同的名称,但参数的数量或类型不同。这有效地隐藏了基类中的虚函数。
默认情况下,此警告已关闭。有关详细信息,请参阅默认情况下关闭的编译器警告。
对于记录,等效的gcc / clang标志为-Woverloaded-virtual
。