가상 상속이란 무엇입니까?
가상 상속은 슈퍼 클래스의 구현이 불완전하고 객체의 완전한 정의를 위해서는 서브 클래스가 필요한 유형의 상속입니다. 이 유형의 상속은 단일 및 다중 상속과 함께 사용될 수 있지만 다중 상속에서 가장 일반적으로 사용됩니다. 가상 기본 클래스에서 상속되는 클래스는 해당 기본 클래스의 직접 서브 클래스가됩니다. 가상 기본 클래스는 모든 방법을 구현하기 위해 서브 클래스에 의존 할 수 있지만 이는 요구 사항이 아닙니다.
C ++는 가상 상속을 사용하는 가장 일반적으로 알려진 컴퓨터 언어입니다. C ++의 가상 상속을 선언하려면 "가상"키워드가 사용됩니다. 슈퍼 클래스와 서브 클래스는 모두 "가상"키워드로 가상 메소드를 선언해야합니다. 이를 통해 C ++ 컴파일러는 슈퍼 클래스가 불완전하다는 것을 알려주고 서브 클래스에서 정보를 가져와 완료해야합니다. 서브 클래스를 사용하여 슈퍼 클래스를 완료하는 것이 서브 클래스가 다음에있는 경우 서로를 덮어 쓰는 것을 의미하지는 않습니다.동일한 기본 클래스와 대신 C ++ 컴파일러는 각 객체와 어떤 조각이 발생하는지 결정합니다.
가상 상속에 가상 기본 클래스가 필요하기 때문에 C ++의 글로벌 기능은 가상으로 선언 될 수 없습니다. 이 상속 유형은 객체 지향 프로그래밍 (OOP) 원리를 준수 할 때만 사용할 수 있습니다. 그 이유는 글로벌 기능이 특정 클래스와 관련이 없으므로 일반적으로 스스로 자체적으로 포함되기 때문입니다. 슈퍼 클래스 및 서브 클래스 상속이 없으면 발생할 수 없으므로 글로벌 기능과 가상 상속은 상호 배타적입니다. 글로벌 기능은 이론적으로 가상 기능 내에서 사용될 수 있지만 그 반대는 항상 작동하지는 않습니다.
가상 상속은 많은 프로그래밍 문제를 해결하는 데 사용되며 가장 유용한 중 하나는 모호성 해상도입니다. 다중 상속에서, 하나는 두 개의 서브 클래스 B와 B와C, 그리고 클래스 B와 C 모두에서 상속되는 클래스 D는 일반적으로 "죽음의 다이아몬드"라고 불립니다. 클래스 A, B 및 C가 동일한 방법의 구현을 가지고 있으면 클래스 D가 어떤 구현을 사용해야하는지 결정할 수는 없습니다. 가상 상속은 각 클래스의 구현이 뚜렷하고 명확하지 않기 때문에이 문제를 해결합니다. 이 차이점은 각 객체 유형을 추적하는 가상 테이블 (VTables)이라는 특수한 내부 객체에 의해 처리되지만,이 테이블은 언어에 내장되어 있기 때문에 프로그래머가 명시 적으로 조작 할 필요는 없습니다.
.