다중 상속은 종종 used in C++이 아닙니다. 대부분의 경우 인터페이스/구현이 혼합되어 있습니다. 그것은 금지되어 있지도 않습니다. (가상) 다중 상속에 대한 필요성은 하나 개의 일반적인 기본 클래스에서 파생하는 디자인 결정에서 온다 :
class Window
{ /* draw, show, hide, background ... */ };
class WindowWithBorder : public virtual Window
{ /* methods to manipulate/draw border ... */ };
class WindowWithMenu : public virtual Window
{ /* methods to manipulate/draw Menu ... */ };
class MyWindow : public WindowWithBorder, public WindowWithMenu
{ /* now it's your turn ... */ };
그 다이아몬드 모양의 상속 그래프는 라이브러리 구현 예견해야합니다. virtual
이 없으면 두 개의 기본 Window
개체가 있고 virtual
은 하나뿐입니다. 단 하나의 개체가 아니기 때문에 많은 창이있을 수 있습니다.
라이브러리는 종종 이러한 상황 (예 : 모든 경우가 아님)을 나타낼 수 있습니다. 을 구현하거나, "뚱뚱한"기본 클래스를 가지거나, 추상 인터페이스 클래스를 구현하거나, 특성/정책이있는 템플릿을 사용하여 구현할 수 있습니다.
Bjarne Stroustrup의 The C++ Programming language (제 3 판의 15 장, 예를 빌렸습니다)의 클래스 계층 구조에 대한 장을 읽는 것이 좋습니다.
C++ 프로그래밍에 대해 읽은 내용이 있습니까? 다중 상속이나 가상 상속은 까다 롭고 매우 자주 피해야합니다. 그리고 문제는 B와 C 모두로부터 계승 된 D 클래스입니다. –
글쎄, 지금은 공부하고 있는데, 기본적인 소개 만했습니다. 누군가가 왜 다른 것을 사용하는지 간단한 예제를 줄 수 있다면 나는 더 나을 것이 분명합니다. 복잡한/경계선의 경우는 필요 없습니다. 한 가지 문장만으로도 기본적인 시나리오가 완벽 할 것입니다. – Bober02
저는 상속이나 가상 상속을 여러 개 사용할 필요가 거의 없습니다. 좋은 규칙은 절대 사용하지 않는 것입니다. –