함수 재정의는 C++의 가장 일반적인 기능입니다. 기본적으로 함수 재정의는 기본 클래스에 있는 함수를 재정의하고 파생 클래스에서도 정의하는 것을 의미합니다. 따라서 함수 서명은 동일하지만 동작이 다릅니다.
그러나 프로그래머가 해당 기능을 재정의하는 동안 실수를 하는 상황이 있을 수 있습니다. 시그니처가 동일하지 않으면 다른 함수로 처리되지만 재정의된 메서드 또는 저것은 처리되지 않습니다. 이 경우 override 키워드를 사용할 수 있습니다. 이 키워드는 C++ +11에 도입되었습니다. 컴파일러는 이러한 종류의 키워드를 찾으면 이것이 동일한 클래스의 재정의된 버전임을 이해할 수 있습니다.
개념을 이해하기 위해 예제를 살펴보겠습니다.
예시
#include <iostream> using namespace std; class BaseClass{ public: virtual void display() { cout << "Displaying from Base Class\n"; } }; class DerivedClass : public BaseClass{ public: void display() { cout << "Displaying from Derived Class\n"; } }; main() { BaseClass *b_ptr; b_ptr = new DerivedClass(); b_ptr->display(); }
출력
Displaying from Derived Class
이 경우 서명이 동일하므로 프로그램이 제대로 작동합니다. 다음 예에서는 서명이 다릅니다. override 키워드의 경우 오류가 발생합니다.
예시
#include <iostream> using namespace std; class BaseClass{ public: virtual void display() { cout << "Displaying from Base Class\n"; } }; class DerivedClass : public BaseClass{ public: void display(int x) override{ cout << "Displaying from Derived Class\n"; } }; main() { BaseClass *b_ptr; b_ptr = new DerivedClass(); b_ptr->display(); }
출력
[Error] 'void DerivedClass::display(int)' marked override, but does not override
이 경우 서명이 동일하므로 프로그램이 제대로 작동합니다. 다음 예에서는 서명이 다릅니다. override 키워드의 경우 오류가 발생합니다.