Programming Language/C,C++

C++] 상속 관계에서의 오버로딩(함수 중복)

TwinParadox 2017. 7. 2. 12:00
728x90



 

#include <iostream>
using namespace std;
 
class Base
{
public:
    void f()
    {
        cout << "Base::f() called" << endl;
    }
};
class Derived :public Base
{
public:
    void f()
    {
        cout << "Derived::f() called" << endl;
    }
};
void main()
{
    Derived d, *pDer;
    pDer = &d;
    pDer->f();
 
    Base* pBase;
    pBase = pDer;
    pBase->f();
}




객체 d는 Base의 f(), Derived의 f()

pDer가 가리키는 객체는 두 개의 f() 함수.

컴파일러는 파생 클래스의 함수를 우선적으로 바인딩.


기본적인 상속에서 기본 클래스의 멤버함수로 작업을 완료하지 못할 경우

파생 클래스에서 동일한 원형으로 중복 작성해 해결 가능.


기본 클래스에 대한 포인터로 기본 클래스의 함수 호출하고,

파생 클래스의 포인터로는 파생 클래스에 작성된 함수 호출

호출관계는 컴파일 시 결정됨(정적 바인딩)


범위 지정 연산자(::) 사용 시, 중복 함수를 구분해 호출 가능.

pDer->f(); // Derived의 f() 호출

pDer->Base::f(); Base의 f() 호출

728x90