오버라이딩

-> 상속 관계에 있어서 부모 클래스가 가지고 있는 멤버 함수를 자식 클래스가 그대로 재정의하는 문법

-> 반환 타입, 함수 이름, 매개 변수 개수, 매개 변수 타입이 모두 같다.

 

부모와 자식이 동일한 함수를 가지고 있고, 이를 호출할 경우 모호성이 발생해야 한다.

즉, 부모와 자식 둘 다 같은 이름의 함수를 가지고 있어야 함.

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()함수가 있다.

-> 당연히 모호성이 발생해야 하지만, 오버라이딩 문법이 적용되어 모호성이 발생하지 않는다.

 

 

+ Recent posts