[c++] virtualの使い方

C++はクラスを継承する際に、デストラクタにvirtual修飾子を付けることが推奨されている。

e.g.
virtual ~Ambulance();

virtual修飾子は仮想関数として機能する。virtualが付いたメンバ関数の場合、子クラスでオーバーライドされた同名のメンバ関数が実行される。

#ifndef _BIRD_H_
#define _BIRD_H_

#include <iostream>
#include <string>

using namespace std;

class Bird {
public:
	virtual void sing();

	void fly();
};

#endif
#include "bird.h"

void Bird::sing(){
	cout << "鳥が鳴く" << endl;
}

void Bird::fly(){
	cout << "鳥が飛ぶ" << endl;
}

継承した仮想関数

#ifndef _CROW_H_
#define _CROW_H_

#include "bird.h"

class Crow : public Bird {
public:
	void sing();

	void fly();
};

#endif
#include "crow.h"

void Crow::sing(){
	cout << "カーカー" << endl;
}

void Bird::fly(){
	cout << "カラスが飛ぶ" << endl;
}

親クラスで定義するんだね。
親クラスで使わない場合は、=0として、純粋仮想関数とすることもできる。

#ifndef _BIRD_H_
#define _BIRD_H_

#include <iostream>
#include <string>

using namespace std;

class Bird {
public:
	virtual void sing() = 0;

	void fly();
};

#endif

仮想関数、純粋仮想関数など馴染みの無い名称だととっつきにくいが、内容は理解しました。