多重継承
継承にはデメリットもある
他のオブジェクト指向言語と違い、C++ならでわ継承の仕方が存在します。
それがプログラム上致命的な問題が起こる原因になったりすることもあります。
例えば、多重継承などが其のうちの一つにあたります。
この多重継承は危険が伴います。
確かに、使いどころによっては考えやすいソースコードを書くことができ、
比較的に見やすくなりますが、大規模プロジェクトになると
根底クラスから末端派生クラスまでの階層が物凄い数になるので
メソッドとフィールドの名前把握が難しくなります。
そういったときに多重継承をしてしまうと、
メソッドやフィールド名が被り、曖昧さが発生する場合があり、
其の曖昧さがセキュリティ面での問題になります。
例えば、クラスαとクラスβを多重継承したものをクラスγとします。
この時、クラスα内のメソッドとクラスβ内のメソッドが同じ名前だったとすると
派生クラスγで被ったメソッドを呼び出す時、
どちらのメソッドを呼び出せば良いのか曖昧になり、コンパイルエラーになります。
例:
class α{
public:
public_method();
};
class β{
public:
public_method();
};
class γ:public α,public β{
public:
};
int _tmain(void)
{
γ instance01;
instance01.public_method();
//基本クラスの内、αのメソッドなのかβのメソッドなのか曖昧
return 0;
}
α→γに継承されたpublic_method()なのか
β→γに継承されたpublic_method()なのか
どちらを呼び出せば良いのかわかりません。
具体的な例を示している項がありますので、
そちらの方を参照すると良いです。≫死のダイヤモンド
これは、C++の継承機能から起こりえる危険性を述べたものなので、
最初の内はそういうもんだと割り切ってください。