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