다음은 정상적으로 오버라이딩을 하는 상황이다.
부모 함수에 virtual 키워드가 지정되어 있고 자식에서 override 키워드가 지정되어 있다.
class Parent
{
virtual void action() { cout << "Parent" << endl; }
};
class Child : public Parent
{
virtual void action() override { cout << "Child" << endl; };
};
출력
Child
부모에 virtual 키워드가 지정되어 있다면, 자식에서 override 키워드를 생략해도 정상적으로 작동은 한다.
class Parent
{
virtual void action() { cout << "Parent" << endl; }
};
class Child : public Parent
{
virtual void action() { cout << "Child" << endl; };
};
출력
Child
부모에서 virtual 키워드를 생략한 경우에는 상속받은 함수가 아니라 자식에서 가상 함수를 정의한 것으로 처리되며 부모 클래스에서의 실수를 감지할 수 없다.
class Parent
{
void action() { cout << "Parent" << endl; }
};
class Child : public Parent
{
virtual void action() { cout << "Child" << endl; };
};
출력
Child
자식에서 override 키워드를 붙여주면 컴파일 과정에서 부모에서 virtual 키워드를 생략한 것을 감지할 수 있다.
class Parent
{
// 컴파일 오류 ! !
void action() { cout << "Parent" << endl; }
};
class Child : public Parent
{
virtual void action() override { cout << "Child" << endl; };
};
출력
컴파일 오류 ! !
'C++ > 기타' 카테고리의 다른 글
람다 식에서 [this] 캡처 (0) | 2023.03.15 |
---|---|
클래스 전방 선언(Forward declaration) (0) | 2023.03.07 |
__cplusplus (0) | 2023.02.21 |
swap(), iter_swap(), swap_ranges() (0) | 2023.02.18 |
재사용 가능한(Reusable) 코드 작성 (0) | 2023.02.16 |