抽象クラス
実装を持たない仮想関数(純粋仮想関数と呼ばれる)を持つクラスが、抽象クラスになります。
- 純粋仮想関数は派生クラスで必ず実装しなければならない関数です。(Javaのabstract関数と同じ)
- 仮想関数のプロトタイプ宣言で「=0;」をつけると、純粋仮想関数になります。
- 親クラスでは関数を実装する必要はありません。
- 抽象クラスはインスタンス化できません。
#include <iostream> // 親クラス class Animal { protected : char* name; public : Animal( char* name ); // 純粋仮想関数。"=0;"をつける。 // 親クラスでは実装する必要はないが // 派生クラスで必ず実装する必要がある virtual void say() = 0; }; Animal::Animal( char* name ){ this->name = name; } // 派生クラス 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; } // メイン関数 int main() { Kitten mii( "mii" ); mii.say(); //純粋仮想関数を持つ親クラスは生成できない。 //Animal a("a"); return 0; }
実行結果です。
I'm kitten mii