Виртуальное наследование в C++ отличается от обычного тем, что оно позволяет предотвратить появление множественных объектов базового класса в иерархии наследования. 1
Без виртуального наследования, если два класса B и C наследуют от класса A, а класс D наследует от обоих B и C, то D будет содержать две копии переменных класса A: одну через B, другую через C. 5
С помощью виртуального наследования, если классы B и C виртуально наследуют от класса A, то объекты класса D будут содержать только один набор переменных класса A. 5
Виртуальное наследование применяется в случаях, когда множественное наследование вместо предполагаемой полной композиции свойств классов-предков приводит к ограничению доступных наследуемых свойств вследствие неоднозначности. 3