ポリモーフィズム(ポインタ)
基本クラスのポインタに派生クラスのポインタを代入して
オーバーライドしたメソッドを実行しているのが、このサンプルです。
基本クラスのメンバー関数を実装しています。
(例)
int clsPolymorphismPointer::calcResult(int data1, int data2)
{
return 0;
}
そして仮想関数のオーバーライドを次のように実装しています。
(例)
int clsPolymorphismPointerChild1::calcResult(int data1, int data2)
{
return data1 + data2;
}
ヘッダでは仮想関数のオーバーライドをするように基本クラスで継承させています。
(例)
class clsPolymorphismPointerChild1 :public clsPolymorphismPointer
基本クラスをポインタの配列宣言をします。
(例)
clsPolymorphismPointer *cls[2];
このサンプルでは2個の派生クラスを使うため
配列の引数を2としています。
ポインタ配列の各要素に派生クラスのインスタンス参照をしたオブジェクトを代入しています。
(例)
clsPolymorphismPointerChild1 cls1;
cls[0] = &cls1;
基本クラスのポインタを添え字を使って指定することにより
メソッドを実行できます。
(例)
result = cls[i]->calcResult(5, 5);
このケースでは次のように添え字によりメソッドを実行できます。
i==0
int clsPolymorphismPointerChild1::calcResult(int data1, int data2)
{
return data1 + data2;
}
i==1
int clsPolymorphismPointerChild2::calcResult(int data1, int data2)
{
return data1 * data2;
}
|
|