A클래스와 이를 상속받는 B클래스가 있다.
class A
{
func() {m();}
m() {}
};
class B : public A
{
m() {}
};
이런식으로 구성이 되어있을때, B클래스의 func 함수를 호출하면, A클래스의 m 함수가 호출될까?
아니면 B 클래스의 m함수가 호출될까?
C++에서는 A클래스의 m함수가 호출되고, Java에서는 B클래스의 m함수가 호출된다.
그 이유는, static binding과 dynamic binding의 차이인데,
static binding에서는 컴파일 타임에 실행될 함수를 미리 결정하는 반면 (C++)
dynamic binding에서는 run-time때 실행될 함수를 결정하기 때문이다. (Java)
이것을 Polymorphism, 가상함수와 관련지어서 얘기해보면
static binding은 객체타입의 function을 call 하는 반면,
dynamic binding은 실제 타입의 function을 call하기 때문에, Polymorphism이 가능해진다.
'C++ > 공개글' 카테고리의 다른 글
클래스 템플릿에서 <<연산자를 오버로딩 할 때 (1) | 2013.01.26 |
---|---|
멤버함수의 선언과 정의 분리 시 참고사항 (0) | 2013.01.26 |
Polymorphism의 조건 (0) | 2013.01.26 |
임시객체와 임시변수의 차이점? (0) | 2013.01.26 |
상속과 포함 관계에서의 객체 생성 순서 (0) | 2013.01.26 |