본문 바로가기

교육 노트/C++ 심화강의

[C++ 때려잡기] C++ 심화강의 11 다중 상속과 가상 상속

2018/08/27 - [교육 노트/C++ 심화강의] - [C++ 때려잡기] C++ 심화강의 1 객체 지향 프로그래밍과 클래스

2018/08/27 - [교육 노트/C++ 심화강의] - [C++ 때려잡기] C++ 심화강의 2 접근 한정자

2018/08/27 - [교육 노트/C++ 심화강의] - [C++ 때려잡기] C++ 심화강의 3 생성자와 소멸자

2018/08/29 - [교육 노트/C++ 심화강의] - [C++ 때려잡기] C++ 심화강의 4 복사 생성자와 깊은 복사

2018/08/29 - [교육 노트/C++ 심화강의] - [C++ 때려잡기] C++ 심화강의 5 this 포인터

2018/08/29 - [교육 노트/C++ 심화강의] - [C++ 때려잡기] C++ 심화강의 6 Class 선언과 정의

2018/08/29 - [교육 노트/C++ 심화강의] - [C++ 때려잡기] C++ 심화강의 7 inline 함수

2018/08/31 - [교육 노트/C++ 심화강의] - [C++ 때려잡기] C++ 심화강의 8 Friend function, friend class

2018/08/31 - [교육 노트/C++ 심화강의] - [C++ 때려잡기] C++ 심화강의 9 연산자 오버로딩, chaining

2018/08/31 - [교육 노트/C++ 심화강의] - [C++ 때려잡기] C++ 심화강의 10 클래스의 핵심 상속


C++에서는 두 클래스에게서 상속 받을수가 있다.

참고로 java에서는 안된다(정확히는 일부로 안되도록 한것!)


다중상속은 코드가 모호해지고 어쩌고 저쩌고 죽음의 다이아몬드 어쩌고 해서 지양 하는 편인데 일단 C++에 있으니까

설명을 대충 해보자면..



1. 다중상속


요런것이다.


요렇게 쓴다.




2. 죽음의 다이아몬드 문제

앗..아앗!

이렇게 되면

카메라폰이 만들어질때


메모리에 요런식으로 5개의 객체가 만들어질테고 전자기기에 ON이라는 함수가 있으면 전화기도 상속받아 있을테고 카메라도 있을테고

카메라폰에는 ON 이 2개!  ON 을 사용하면 어느 ON의 주인이 누구인지 알길이 없어 족보가 꼬여버린다 (모호해진다)


요런 상황이 죽음의 다이아몬드이고

요런 상황때문에 개발자를 믿지 못하는 java는 아예 못하게막아놓았다

그러나 C++ 은 개발자를 너무 잘 믿기 때문에 다중 상속을 허용해놓았는데

뭐 허용했으니 어쩌겠는가 해결방안도 만들어야지..



3. 가상 상속

이 둘을


요렇게 바꾸면된다 (가상 상속)


문제가 말끔히 해결되었다!

는 아니고 걍 다중상속을 안쓰면 해결된다.

그리고 friend와 같이 거의다 안써도 해결 가능 하다

정 안될때 빼고는 지양하도록 하자


728x90