覆盖虚拟方法时,我注意到当我在可见性方面犯了一个错误(将 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/

09-25 17:50