가상 메서드를 재정의 할 때 공개 옵션 (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();
}
나는 행운과 함께, -Wall -Wextra로, GCC와 그 소리 컴파일했습니다. 이 코드에서 CppCheck를 실행했지만 여전히 운이 없습니다.
어떤 도구가이를 감지하는 데 도움이 될 수 있습니까? 내가 작업중인 라이브러리의 전체 소스를 수정해야합니다.
확인되지 실수 : 여기
는 ctags를 출력에서 정보를 추출하는 떠들썩한 조각입니다. 질문에서 언급했듯이, 나는 그것이 C++ 완벽하게 유효하다는 것을 인정한다. 일반적으로 노출되지 않아야하는 것을 노출하고 있기 때문에 원하는 것은 아닙니다. – Julien그래, 그건 실수가 아니야. 이것은 저작자의 의도가 아니더라도 단순히 언어로 작성할 수있는 것입니다. 이것은 가상의 "내가 다른 것을 의미하는지 알려주십시오"라는 경고 중 하나입니다. 누가 파생 된 유형을 아는 사람에게 액세스 할 수있는 기능을 원하지만 기본 유형 만 알고있는 사람에게는 기능이 필요하지 않은 상황이 있을지 모릅니다. –
이것은 훌륭한 질문입니다. –