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
'Programming Language > C,C++' 카테고리의 다른 글
C,C++] 조건 컴파일 문 (0) | 2017.07.06 |
---|---|
C, C++] 헤더파일과, CPP파일로 소스 코드 분리 (29) | 2017.07.04 |
C++] 가상함수 호출과 오버라이딩 (66) | 2017.07.01 |
C++] 일반화와 템플릿 (0) | 2017.06.28 |
C++] 추상 클래스 (0) | 2017.06.26 |