多態性
多態性(ポリモーフィズム)について。C++では次のような手順になります。
#include <iostream> // 親クラス class Animal { protected : char* name; public : Animal( char* name ); // 派生クラスでオーバーライドする関数。virtualをつける。 virtual void say(); }; Animal::Animal( char* name ){ this->name = name; } void Animal::say() { std::cout << "I'm animal "<< this->name << std::endl; } // 派生クラス1 class Kitten : public Animal { public : Kitten( char* name ); void say(); }; Kitten::Kitten(char* name ) : Animal( name ) { } void Kitten::say() { std::cout << "I'm kitten "<< this->name << std::endl; } // 派生クラス2 class Tiger : public Animal { public : Tiger( char* name ); void say(); }; Tiger::Tiger(char* name ) : Animal( name ) { } void Tiger::say() { std::cout << "I'm tiger "<< this->name << std::endl; } // メイン関数 int main() { Kitten mii( "mii" ); Tiger tora( "tora" ); // 親クラスのポインタ。 // 親クラスのポインタまたは、そり派生クラスのポインタを代入できる。 Animal* p = &mii; // ポインタの示すインスタンスのメソッドを実行(「->」)演算子を使う。 // 派生クラスでオーバーライドしたメソッドが実行される。 p->say(); // I'm kitten mii p = &tora; p->say(); // I'm tiger tora return 0; }
実行結果です。
I'm kitten mii I'm tiger tora