C++はJavaを普段使っている私には何かと不思議なところがあってそのひとつに多重継承
があります。
異なるクラスを多重継承するなら普通なのですが、多重継承できるということは並列継承
もできてしまいます。
ちょっと気になったので調べてみました。
※間違ってるところがあったら指摘願います><
多重継承
母 父 \ / 子
多重継承の場合母の特徴と父の特徴を継承しています。
並列継承
人 / \ 母 父 \ / 子
この場合同じように子クラスから父と母のメソッドを呼び出すことは可能ですが
「人」のメソッドを呼ぼうとしたときに母から呼べばいいのか父から呼べばいいのかわか
らなくなってしまいコンパイルエラーとなります。
これを解消するのが「virtual」です。
virtual
母と父にvirtualをつけた場合子クラスは人クラスのコピーを1つしか持ちません。
そのため人クラスのメソッドにもアクセスすることができます。
つまり多重継承の場合
父extends人(基本クラス) 母extends人(基本クラス)
となりますが並列継承+Virtualの場合
人(基本クラス) 父 extends 人(仮想基本クラス) 母 extends 人(仮想基本クラス)
となるので子クラスからでも人クラスにアクセス可能となる。