覆盖虚拟方法时,我注意到当我在可见性方面犯了一个错误(将 protected 方法重写为公共(public)方法)时,编译器未警告我。
它是有效的C++,但通常是错误的。
例如:
#include <iostream>
class Base
{
protected:
virtual void ProtectedMethod(void)
{
std::cout << "Base::ProtectedMethod" << std::endl;
}
};
class Derived : public Base
{
public:
virtual void ProtectedMethod(void)
{
std::cout << "Derived::ProtectedMethod" << std::endl;
}
};
int main(int, char* [])
{
Derived d;
d.ProtectedMethod();
}
我尝试使用gcc和clang进行编译,使用-Wall -Wextra进行编译,但是没有运气。
我在此代码上运行了CppCheck,仍然没有运气。
哪些工具可以帮助我检测到这一点?
我需要修复正在使用的库的全部资源。
最佳答案
Inspirel使您可以定义自己的规则:http://www.inspirel.com/vera/