ポリモーフィズム - (2017/12/08 (金) 17:50:24) の編集履歴(バックアップ)
ポリモーフィズム
ポリモーフィズム
オブジェクト指向の要となる概念のひとつにポリモーフィズム(多態性)があります。
前章の「Person」クラスと「Student」クラスを例にとります。
「Student」クラスは「Person」クラスのサブクラスです。
実は、派生クラスのポインタは基底クラス型に入れることができます。
「Student」クラスは「Person」クラスのサブクラスです。
実は、派生クラスのポインタは基底クラス型に入れることができます。
Person *karasawa = new Student();
唐澤は学生である前に人間なのです。
しかし、Person型に入れるとStudent型の変数や関数を呼び出すことができなくなります。
karasawa->SelfIntroduction(); // 呼び出し可 karasawa->GetID(); // 呼び出し不可 エラー
さらに、以下のような問題があります。
オーバーライドした関数
「SelfIntroduction」は「Student」クラスでオーバーライドしていますが、
Person型に入れると「Person」クラスの「SelfIntroduction」が実行されてしまいます。
Person型に入れると「Person」クラスの「SelfIntroduction」が実行されてしまいます。
int main(){ // Studentとしてkarasawaを生成 Person *karasawa = new Student("唐沢", 24, 241035); karasawa->SelfIntroduction() // 自己紹介(Personのものが実行される) delete karasawa; return 0; }
この問題を解決方は次の章で解説します。