2009. 1. 10. 13:40
C/C++/MFC
2개의 클래스를 상속 받는 클래스 D가 있다고 하자. 이 2개의 클래스 A, B가 다시 하나의 공통된 클래스 C를 상속 받는다고 하자. A,B는 C를 상속 받으므로 결국 클래스 D에는 C부분이 2개가 생기게 된다. 이렇게 생성된 D클래스에서 C의 멤버 함수를 호출하려고 할 때 모호함으로 인해 error가 발생하므로 명시적으로 어느 부분에 있는 멤버 함수를 호출하겠다고 적을 수 있다.
ex> return A::GetAge;(C 클래스에 GetAge()함수가 있다고 가정하자.)
이렇게 해서 문제를 해결할 수 있지만 근본적인 해결책은 되지 않는다. 클래스 D에 C부분이 1개가 되게 만들 수 없을까? 이 방법이 바로 가상 상속이다.
보통 클래스의 생성자는 그 자신의 변수와 기반 클래스를 초기화한다. 그러나 가상 상속된 기반 클래스는 예외이다. 이 것들은 최하위 파생(most derived) 클래스에 의해 초기화된다.
그러므로 첨부된 파일 예제에서 Animal는 Horse나 Bird에 의해서가 아니라 Pegasus에 의해 초기화된다. Horse와 Bird는 각 생성자에서 Animal을 초기화해야 하지만, 이러한 초기화는 Pegasus 객체가 만들어 질 때 무시될 것이다.
※ 가상 상속 예
class Bird : virtual public Animal
'C/C++/MFC' 카테고리의 다른 글
C_STR() 이란?? (0) | 2009.01.10 |
---|---|
연결리스트 삽입,삭제 구현 예제(스택) (0) | 2009.01.10 |
" call by value " 와 " call by reference " 의 차이점 (0) | 2009.01.10 |
API 종료 방법 (0) | 2009.01.10 |
메뉴 항목 체크/ 해지 하기 (0) | 2009.01.10 |