メインウィンドウ

Windowsプログラミングの雛形を作るために、仮想関数について説明します。

仮想関数

次のようなクラスを作ります。 メソッドの前に、"virtual" が付いています。

class MyMainWnd{

public:
	virtual void setMyWnd(WNDCLASSEX& wc, CREATESTRUCT& cs){}
};

解説

MyMainWnd型の変数を用意します。

MyMainWnd wd;

この場合、次のように使っても "virtual" は機能しません。 "virtual" は、継承した子クラスで機能します。

wd.setMyWnd(wc, cs);

今は、メソッドの中身は空なので、何もしません。 次に、このクラスを継承します。

class MyApp : public MyMainWnd{
};

MyApp型の変数を用意します。

MyApp wd;

この場合も、"virtual" は影響なく、次のように使います。

wd.setMyWnd(wc, cs);

さて、関数は、引数が異なれば幾つでも作れます。 しかし、クラスの継承の場合、同じメソッドも書くことができます。 次は、中身があります。

class MyApp : public MyMainWnd{
	void setMyWnd(WNDCLASSEX& wc, CREATESTRUCT& cs){
		wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);	// 背景ブラシ
	}
};

ここで、"virtual" が機能します。 wd.setMyWnd(wc, cs) とすれば MyAppクラスのメソッドが呼び出されます。

しかし、"virtual" を付けなければ、親のメソッドが呼ばれ、子のメソッドは無視されます。 というより、同じメソッドが2つ存在するのですから、どちらのメソッドを呼んでいるのか、あいまいになってしまいます。 こんな時、"virtual" をつけ、仮想関数といいます。


[前] [目次] [次]