Виртуальное наследование — это техника C++, используемая для решения "проблемы ромба" в сценариях множественного наследования. Эта проблема возникает, когда класс наследует от двух классов, оба из которых имеют общий базовый класс. Без виртуального наследования производный класс будет содержать две отдельные копии членов базового класса, что приведет к неоднозначности. Используя виртуальное наследование, например class B : public virtual A, производный класс D, наследующий от B и C, будет иметь только один экземпляр базового класса A. Это гарантирует доступ к единой копии членов A. Однако виртуальное наследование имеет эффект только тогда, когда существуют дальнейшие производные классы, которые столкнутся с неоднозначностью. Коллега Мэнди злоупотребляет виртуальным наследованием, применяя его даже тогда, когда это не требуется. Например, маркировка final класса SomeSpecificDerivedClass с public virtual SomeBaseClass не имеет практической пользы. От final класса нельзя наследовать, что делает объявление виртуального наследования избыточным. Следовательно, использование виртуального наследования по умолчанию во всех ситуациях, как это делает коллега Мэнди, часто является неэффективной и ненужной практикой.
class B : public virtual A, производный классD, наследующий отBиC, будет иметь только один экземпляр базового классаA. Это гарантирует доступ к единой копии членовA. Однако виртуальное наследование имеет эффект только тогда, когда существуют дальнейшие производные классы, которые столкнутся с неоднозначностью. Коллега Мэнди злоупотребляет виртуальным наследованием, применяя его даже тогда, когда это не требуется. Например, маркировкаfinalклассаSomeSpecificDerivedClassсpublic virtual SomeBaseClassне имеет практической пользы. Отfinalкласса нельзя наследовать, что делает объявление виртуального наследования избыточным. Следовательно, использование виртуального наследования по умолчанию во всех ситуациях, как это делает коллега Мэнди, часто является неэффективной и ненужной практикой.