C ++での仮想継承について読んでいるときに、Webサイトでこれを見つけました
多重継承を使用する場合、仮想継承を使用する必要がある場合があります。これの良い例は、標準の 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
仮想メンバーから派生したクラスの数に関係なく、仮想メンバーのインスタンスが 1 つしか存在しないことを C++ はどのように保証しますか? C++ は追加レベルの間接化を使用して、通常はポインタを使用して仮想クラスにアクセスします。つまり、iostream 階層内の各オブジェクトには、ios オブジェクトの共有インスタンスへのポインターがあります。追加レベルの間接化により、パフォーマンスのオーバーヘッドがわずかに発生しますが、支払う代償はわずかです。
私は声明と混同しています:
C++ は追加レベルの間接化を使用して、通常はポインターを使用して仮想クラスにアクセスします。
誰もこれを説明できますか?