c++ 다중 상속 예제

Skrevs fredagen den 2 augusti, 2019

이 두 번째 예제는 더 분명하게 대칭이기 때문에 이전 예제와 약간 다릅니다. 이 대칭은 비늘을 여러 상속 솔루션쪽으로 약간 기울이지만 다른 중 하나는 여전히 일부 상황에서 가장 적합할 수 있습니다. 긴 대답: ”가장 파생된” 클래스가 D라고 가정하면 원래 만들어진 실제 개체가 클래스 D이고 D가 B1과 B2에서 곱(및 사실상)되지 않는 상속을 받는다고 가정합니다. 가장 많이 파생된 클래스 D에 해당하는 하위 오브젝트가 먼저 실행되고 그 다음에 역방향 선언 순서로 비가상 기본 클래스에 대한 dtors가 실행됩니다. 따라서 소멸자 순서는 D, B2, B1이 될 것입니다. 이 규칙은 재귀적으로 적용됩니다. 예를 들어 B1이 B1a및 B1b에서 상속되고 B2가 B2a 및 B2b에서 상속되는 경우 최종 순서는 D, B2, B2b, B2a, B1b, B1b, B1a입니다. 상속된 클래스의 생성자는 상속되는 순서와 동일한 순서로 호출됩니다. 예를 들어 다음 프로그램에서는 B의 생성자가 A의 생성자 앞에 호출됩니다. 아래 코드를 보십시오. 파충류 클래스에서 breathe() 메서드를 재정의했다는 점을 제외하면 위의 예제의 코드와 같습니다. ”무서운 다이아몬드”는 특정 클래스가 클래스의 상속 계층 구조에서 두 번 이상 나타나는 클래스 구조를 나타냅니다. 예를 들어 상속은 여러 가지 방법으로 수행할 수 있습니다.

지금까지 우리는 다른 예에서 다양한 유형의 상속을 접했습니다. 모든 가상 기본 클래스 생성자가 완료된 후 구성 순서는 일반적으로 기본 클래스에서 파생 클래스로 됩니다. 세부 사항은 컴파일러가 파생 클래스의 ctor에서 수행하는 첫 번째 일은 가상이 아닌 기본 클래스의 ctors에 숨겨진 호출을하는 것이라고 상상하는 경우 이해하기 쉽습니다 (힌트 : 많은 컴파일러가 실제로 수행하는 방식임). 따라서 클래스 D가 B1과 B2에서 곱하면 B1의 생성자가 먼저 실행되고 B2의 생성자가 실행되고 D의 생성자가 됩니다. 이 규칙은 재귀적으로 적용됩니다. 예를 들어 B1이 B1a와 B1b에서 상속되고 B2가 B2a 및 B2b에서 상속되는 경우 최종 순서는 B1a, B1b, B1, B2a, B2b, B2b, B2, D입니다.

Teater Kapija
Örmölla 321
SE-274 56 Abbekås

+46 (0)411 533 772
+46 (0)70 740 17 61

info@kapija.com
www.kapija.com