가상 함수가있는 기본 클래스가 있고 파생 클래스에서 해당 함수를 재정의하고 싶습니다. 파생 클래스에서 선언 한 함수가 실제로 기본 클래스의 함수를 재정의하는지 컴파일러에서 확인하는 방법이 있습니까? 이전 함수를 재정의하는 대신 실수로 새 함수를 선언하지 않았는지 확인하는 매크로 또는 무언가를 추가하고 싶습니다.
이 예를 보자 :
class parent {
public:
virtual void handle_event(int something) const {
// boring default code
}
};
class child : public parent {
public:
virtual void handle_event(int something) {
// new exciting code
}
};
int main() {
parent *p = new child();
p->handle_event(1);
}
자식의 메서드가 선언을 놓치고 새 메서드를 선언 하기 때문에 parent::handle_event()
대신 여기 가 호출됩니다 . 이것은 함수 이름의 오타이거나 매개 변수 유형의 사소한 차이 일 수도 있습니다. 기본 클래스의 인터페이스가 변경되고 일부 파생 클래스가 변경 사항을 반영하도록 업데이트되지 않은 경우에도 쉽게 발생할 수 있습니다.child::handle_event()
const
이 문제를 피할 수있는 방법이 있습니까? 어떻게 든 컴파일러 나 다른 도구에 이것을 확인하도록 지시 할 수 있습니까? 유용한 컴파일러 플래그 (g ++ 권장)가 있습니까? 이러한 문제를 어떻게 피할 수 있습니까?