При переопределении виртуального метода я заметил, что когда я делаю ошибку в видимости (защищенный метод переопределяется как открытый метод), компилятор не предупреждает меня.
Это правильный 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 для этого кода, но все равно не повезло.
Какой инструмент может помочь мне обнаружить это? Мне нужно исправить все исходные коды библиотеки, над которой я работаю.