Для устранения неоднозначности используется виртуальное наследование.
ел это на веб-сайте, читая о виртуальном наследовании в C ++
Когда используется множественное наследование, иногда необходимо использовать виртуальное наследование. Хорошим примером для этого является стандартная иерархия классов iostream:
//Note: this is a simplified description of iostream classes
class ostream: virtual public ios { /*..*/ }
class istream: virtual public ios { /*..*/ }
class iostream : public istream, public ostream { /*..*/ }
//a single ios inherited
Как C ++ гарантирует, что существует только один экземпляр виртуального члена, независимо от количества производных классов?C ++ использует дополнительный уровень косвенности для доступа к виртуальному классу, обычно с помощью указателя, Другими словами, каждый объект в иерархии iostream имеет указатель на общий экземпляр объекта ios. Дополнительный уровень косвенности имеет небольшое снижение производительности, но это небольшая цена.
меня смущает утверждение:
C ++ использует дополнительный уровень косвенности для доступа к виртуальному классу, обычно с помощью указателя
Кто-нибудь может объяснить это?