Это виртуальное наследование, посмотрите here для получения пояснения.
Общее использование, если у вас есть класс A, наследующий от 2 классов B и C, которые, в свою очередь, наследуются от одного и того же предка D. Это проблематично с обычным наследованием, поскольку A будет содержать два экземпляра D, поэтому который следует использовать. Использование виртуального наследования, например. C, наследующий виртуальный от D, адрес экземпляра D в C-части A находится в vmt, поэтому он может указывать на тот же экземпляр, что B-часть использует
http://www.parashift.com/c++-faq-lite/multiple-inheritance.html#faq-25.9 Это поможет вам. – liaK