Upcasting & Binding
a), b)는 각각 Animal Cry, Dog Cry가 호출된다.
func함수는 Animail의 객체로 Cry를 호출하는 함수이다.
c)와 d)는 무엇이 출력될까?
둘 다 Animal Cry가 출력된다.
부모 포인터에 자식 객체의 주소를 담을 수 있기 때문에 Animal Cry가 출력된다.
이는 public 상속일 때만 가능하다. private 상속이면 Dog로 생성한 객체로 Cry를 부를 수 없다.
e)는 pAnimal에 Dog를 담은 후 Cry를 호출했다. d)와 별 다를 것이 없다.
역시 Animal Cry가 호출된다.
Composite Patten
A와 B를 묶고싶다면 "공통의 부모 클래스"를 만들어야 한다.
f)를 보자.
n은 컴파일 시간이 아닌 실행시간중에 결정된 변수이다. 이때 출력되는 것은 무엇일까?
결론부터 말하자면, 0, 1, 2 어느 것을 하던 Animal Cry가 출력된다.
컴파일 시간에 pAnimal가 어느 객체를 가르키는지 알 수는 없고, 무슨 타입인지만 알 수 있다.
pAnimal->Cry()를 어떤 함수에 연결할 것인가? 함수 바인딩 문제
- static binding : 컴파일러가 컴파일 시간에 결정
원리는 포인터의 타입만 가지고 결정, Animal Cry 호출
early biding, 속도가 빠르다. (C++, C#)
- dynamic biding : 컴파일러가 컴파일 시간에 pAnimal의 메모리를 조사하는 기계어 코드 생성
실행 시간에 메모리 조사 후 호출, Dog Cry 호출
late binding, 실행할 때 조사해봐야해서 성능 저하가 있다.
'프로그래밍 > 디자인패턴' 카테고리의 다른 글
[ST교육] 접근변경자 (드디어 첫번째 패턴 : Adapter) (0) | 2014.09.06 |
---|---|
[ST교육] 생성자소멸자 (0) | 2014.09.06 |
[ST교육] thiscall 4 (0) | 2014.08.31 |
[ST교육] thiscall 3 (0) | 2014.08.31 |
[ST교육] thiscall 2 (0) | 2014.08.31 |