[Basic C++] #14_오버라이딩의 특수한 경우 두 번째
C++ 개발에서 오버라이딩을 사용 시 주의할 점에 대해서 알아보겠습니다.
"전문가를 위한 C"의 9 항목, "클래스 상속 활용 테크닉"에 해당하는 내용입니다.
오버로딩 된 가상 함수를 오버라이딩 할 경우
class Suepr
{
public:
virtual void Overload() {...}
virtual void Overload(int i) {...}
};
class Sub : public Super
{
public:
virtual void Overload() {...}
};
특정 프로토타입을 가지는 가상 함수를 오버라이딩 하면 파라미터와 관계없이 같은 이름을 가지는 부모 클래스의 모든 함수가 숨겨지게 됩니다.
쉽게 말해서, 특정 프로토타입의 함수를 오버라이딩 한다는 것은 파라미터의 형태가 달라도 같은 이름의 함수들을 모두 오버라이딩 하겠다는 의도가 됩니다.
오버로딩된 가상 함수 + 오버로딩된 가상 함수 -> 오버라이딩 = 앞선 2 개의 오버로딩된 가상 함수들을 모두 가립니다.
그렇다면, 다른 파라미터를 갖는 오버로딩된 가상 함수를 호출하기 위해서 어떠한 방법들이 존재할까요?
1. 타입 캐스팅
Sub mySub;
Super* mySuper = &mySub;
mySuper->Overload(3); // Super::Overload(int i)가 정상적으로 호출됩니다!
간단한 방법으로 부모 클래스로 캐스팅 해주어 오버로딩 된 함수를 호출하는 방법이 있습니다.
2. using 키워드
class Super
{
... // 위와 동일
};
class Sub : public Super
{
public:
using Super::Overload;
virtual void Overload() override {...}
};
이전에 다루었던 "생성자의 상속" 항목에서 살펴본 using 키워드를 이곳에 적용합니다.
가상 함수 중 부모 클래스의 것을 활용하고자 할때, using 키워드를 통해 부모 클래스의 것을 이용하고자 함을
명시적으로 나타냅니다.
'언어 > Basic C++' 카테고리의 다른 글
[Basic C++] #16_오버라이딩의 특수한 경우 네 번째, 디폴트 인자 값 (0) | 2022.04.03 |
---|---|
[Basic C++] #15 오버라이딩의 특수한 경우 세 번째 (0) | 2022.03.26 |
[Basic C++] #13_오버로딩, static 함수의 오버로딩 (0) | 2022.03.25 |
[Basic C++] #12 순수 가상 함수, 추상 클래스 (0) | 2022.03.25 |
[Basic C++] #11 생성자의 상속 (0) | 2022.03.18 |