가상 상속은 C++에서 다중 상속 시나리오의 "다이아몬드 문제"를 해결하기 위해 사용되는 기법입니다. 이 문제는 두 클래스가 공통의 기반 클래스를 가지고 있을 때, 두 클래스로부터 클래스가 상속받을 때 발생합니다. 가상 상속이 없으면, 파생 클래스는 기반 클래스의 멤버를 두 개의 별도 복사본으로 가지게 되어 모호성을 유발합니다. class B : public virtual A와 같은 가상 상속을 사용함으로써, B와 C 모두로부터 상속받는 파생 클래스 D는 기반 클래스 A의 단일 인스턴스만 가지게 됩니다. 이는 A의 멤버에 대한 통합된 복사본에 접근할 수 있도록 보장합니다. 그러나 가상 상속은 모호성을 겪게 될 추가적인 파생 클래스가 있을 때만 효과가 있습니다. Mandy의 동료는 불필요할 때에도 가상 상속을 과도하게 사용해 왔습니다. 예를 들어, final 클래스인 SomeSpecificDerivedClass에 public virtual SomeBaseClass를 표시하는 것은 실질적인 이점이 없습니다. final 클래스는 상속될 수 없으므로, 가상 상속 선언은 불필요하게 됩니다. 따라서 Mandy의 동료처럼 모든 상황에서 가상 상속을 기본값으로 사용하는 것은 종종 비효율적이고 불필요한 관행입니다.
class B : public virtual A와 같은 가상 상속을 사용함으로써,B와C모두로부터 상속받는 파생 클래스D는 기반 클래스A의 단일 인스턴스만 가지게 됩니다. 이는A의 멤버에 대한 통합된 복사본에 접근할 수 있도록 보장합니다. 그러나 가상 상속은 모호성을 겪게 될 추가적인 파생 클래스가 있을 때만 효과가 있습니다. Mandy의 동료는 불필요할 때에도 가상 상속을 과도하게 사용해 왔습니다. 예를 들어,final클래스인SomeSpecificDerivedClass에public virtual SomeBaseClass를 표시하는 것은 실질적인 이점이 없습니다.final클래스는 상속될 수 없으므로, 가상 상속 선언은 불필요하게 됩니다. 따라서 Mandy의 동료처럼 모든 상황에서 가상 상속을 기본값으로 사용하는 것은 종종 비효율적이고 불필요한 관행입니다.