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