「ポリモーフィズム」の編集履歴(バックアップ)一覧に戻る

ポリモーフィズム - (2017/12/08 (金) 17:50:24) の編集履歴(バックアップ)


ポリモーフィズム

ポリモーフィズム

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

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

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

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

オーバーライドした関数

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

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

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