SSブログ

C++ クラス -オーバーライド- [開発環境]

参考サイト

http://www.geocities.jp/ky_webid/index_old.html

◆オーバーライド

継承によって作られたサブクラスは、スーパークラスのメンバを引き継ぎますが、オーバーライドを使うと、 引き継いだメンバ関数の中身を書き換えることができます。つまり、スーパークラス側とサブクラス側とで、異なる 動作をさせることができるようになるということです。

コーディング例

// pen.h

// CColorPenクラスで使う線の色
#define BLACK (0)
#define RED (1)
#define BLUE (2)
#define GREEN (3)


// 黒いペンのクラス
class CPen
{
public:
// 線を描く
virtual void DrawLine(int sx, int sy, int ex, int ey);
};

// 色ペンのクラス
class CColorPen : public CPen
{
public:
// 線を描く
void DrawLine(int sx, int sy, int ex, int ey);
// 線の色を設定する
void SetColor(int color);

private:
// 線の色
int m_color;
};
// pen.cpp
#include "pen.h"

// 黒い線を描く
void CPen::DrawLine(int sx, int sy, int ex, int ey)
{
// 黒い線を描く
}

// 現在設定されている色で線を描く
void CColorPen::DrawLine(int sx, int sy, int ex, int ey)
{
// m_colorを参照して、その色で線を描く
}

// 線の色を設定する
void CColorPen::SetColor(int color)
{
m_color = color;
}


オーバーライドを行うためには、スーパークラス側のメンバ関数に「virtual」 というキーワードを付けます。virtualを付けて宣言されたメンバ関数のことを、仮想関数 と呼びます。

そして、メンバ関数の定義ですが、スーパークラス側もサブクラス側も、両方とも定義を記述します。そのため、 両者の内容を変えれば、動作を変更できるわけです。CPenクラス側のDrawLineメンバ関数を呼び出すと、黒い線が描かれ、 CColorPenクラス側のDrawLineメンバ関数を呼び出すと、現在の色で線が描かれるようにします。

main関数の方は、次のようにしたとします。


// main.cpp
#include "pen.h"

int main()
{
CPen pen;
CColorPen color_pen;

pen.DrawLine( 10, 10, 100, 100 ); // 黒い線を描く
color_pen.SetColor( RED ); // 赤色を設定
color_pen.DrawLine( 20, 20, 200, 200 ); // 赤い線を描く

return 0;
}


nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。