[Basic C++] #18_오버라이딩의 특수한 경우 여섯 번째, 일반 메소드의 오버라이딩
C++ 개발에서 오버라이딩을 사용 시 주의할 점에 대해서 알아보겠습니다.
"전문가를 위한 C"의 9 항목, "클래스 상속 활용 테크닉"에 해당하는 내용입니다.
"virtual"을 사용하지 않을 경우
class Super
{
public:
void go() {cout << "go called on Super!" << endl;}
};
class Sub
{
public:
void go() {cout << "go called on Sub!" << endl;}
};
// Main 문
Sub mySub;
Super& ref = mySub;
ref.go() // Super의 "go" 메소드가 호출됩니다!
베이스 클래스의 "virtual" 메소드, 즉 가상 함수만이 올바르게 오버라이딩 됩니다.
베이스 클래스의 "virtual" 키워드가 없는 메소드 또한 오버라이딩이 가능하지만, 문제가 발생합니다.
베이스 클래스 타입으로 접근하여, 파생 클래스 타입의 메소드를 호출하면 이름이 가려지지 않고,
그대로 베이스 클래스의 메소드가 호출됩니다.
virtual 키워드 없이 오버라이딩 할 경우, 베이스 클래스의 메소드 이름이 가려지지 않습니다.
'언어 > Basic C++' 카테고리의 다른 글
[Basic C++] #20_virtual 키워드, vtable 오버헤드 (0) | 2022.05.01 |
---|---|
[Basic C++] #19_virtual, virtual의 내부 구현 (0) | 2022.04.30 |
[Basic C++] #17_오버라이딩의 특수한 경우 다섯 번째, 복제 생성자, 대입 연산자 (0) | 2022.04.24 |
[Basic C++] #16_오버라이딩의 특수한 경우 네 번째, 디폴트 인자 값 (0) | 2022.04.03 |
[Basic C++] #15 오버라이딩의 특수한 경우 세 번째 (0) | 2022.03.26 |