오버라이딩
-> 상속 관계에 있어서 부모 클래스가 가지고 있는 멤버 함수를 자식 클래스가 그대로 재정의하는 문법
-> 반환 타입, 함수 이름, 매개 변수 개수, 매개 변수 타입이 모두 같다.
부모와 자식이 동일한 함수를 가지고 있고, 이를 호출할 경우 모호성이 발생해야 한다.
즉, 부모와 자식 둘 다 같은 이름의 함수를 가지고 있어야 함.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
class CObj
{
public:
void Func()
{
cout << "CObj Func" << endl;
}
};
class CPlayer : public CObj
{
public:
void Func()
{
cout << "CPlayer Func" << endl;
}
};
|
cs |
단, 오버라이딩은 모호성이 발생하지 않는다.
오버라이딩 된 함수를 호출할 경우 실 객체 기준으로 판단하지 않고
객체 타입 기준으로 판단하여 함수를 호출한다.
-> 객체 타입 기준의 함수가 앞으로 나오고, 실 객체의 함수가 뒤로 숨는다.
1 2 3 4 5 6 7 8 | void main() { 객체 타입 실 객체 CObj* pObj = new CPlayer; pObj->Func(); delete pObj; } | cs |
CPlayer는 CObj를 상속 받고 있다.
-> CObj의 CPlayer 클래스 내부에는 Func()함수가 있다.
-> 당연히 모호성이 발생해야 하지만, 오버라이딩 문법이 적용되어 모호성이 발생하지 않는다.
'Programming > C++ Basic' 카테고리의 다른 글
C++ 캐스팅(static_cast, dynamic_cast, const_cast, reinterpret_cast) (0) | 2020.09.18 |
---|---|
C++ 가상 함수(virtual), 가상 소멸자, 순수 가상 함수 (0) | 2020.09.18 |
C++ 객체 포인터 (0) | 2020.09.17 |
C++ 상속성 (0) | 2020.09.17 |
C++ friend (0) | 2020.09.17 |