C++スコーラ

ポリモーフィズム

最終更新:

cschola

- view
管理者のみ編集可

ポリモーフィズム

ポリモーフィズム

オブジェクト指向の要となる概念のひとつにポリモーフィズム(多態性)があります。

前章の「Person」クラスと「Student」クラスを例にとります。
「Student」クラスは「Person」クラスのサブクラスです。
実は、派生クラスのポインタは基底クラス型に入れることができます。
Person *satou = new Student();
佐藤は学生である前に人間なのです。

しかし、Person型に入れるとStudent型の変数や関数を呼び出すことができなくなります。
satou->SelfIntroduction();	// 呼び出し可
satou->GetID();		// 呼び出し不可 エラー

さらに、以下のような問題があります。

オーバーライドした関数

「SelfIntroduction」は「Student」クラスでオーバーライドしていますが、
Person型に入れると「Person」クラスの「SelfIntroduction」が実行されてしまいます。
int main(){

	// Studentとしてsatouを生成
	Person *satou = new Student("佐藤", 24, 241035);
	
	satou->SelfIntroduction()	// 自己紹介(Personのものが実行される)

        delete satou;
	
	return 0;
}
この問題を解決方は次の章で解説します。
目安箱バナー