유돌이

calendar

1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

Notice

2009. 1. 10. 13:40 C/C++/MFC
출처 Sujin's home | 예섬
원문 http://blog.naver.com/psjin14/100016885851
 

  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
posted by 유돌이