「ポリモーフィズム」(2021/05/20 (木) 13:10:29) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
*ポリモーフィズム
**ポリモーフィズム
オブジェクト指向の要となる概念のひとつにポリモーフィズム(多態性)があります。
前章の「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;
}
この問題を解決方は次の章で解説します。
*ポリモーフィズム
**ポリモーフィズム
オブジェクト指向の要となる概念のひとつにポリモーフィズム(多態性)があります。
前章の「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;
}
この問題を解決方は次の章で解説します。
表示オプション
横に並べて表示:
変化行の前後のみ表示: