クラス関数の設定
今度はボタンを選択状態にして (マウスでクリックして)、 ClassWizard をたちあげて、メッセージマップを見る。
Button1をクリックすると,メンバ関数の追加のダイアログがでるので,OKボタンをクリックすると,次のようなOnButton1()イベントハンドラが表示されるので,の中に以下のようなコードを記述する。
=======================================================
void CDialog1Dlg::OnButton1()
{
string str;
int xst,yst;
UpdateData(TRUE); // Edit1からデータを読み込む
str=m_sEdit;
istringstream iss(str); // 2つの整数をストリームして扱う。
iss xst yst;
m_Output = gcdivisor(xst,yst);
UpdateData(FALSE);
}
=======================================================
ユーザ関数の設定
まずヘッダーに次の書き込みをします。
Private関数の挿入
関数 gcdivisor のスケルトンを CGCD1Dlg.cppに付け加えます。このために ClassView から CGCD1Dlgをマウスの左ボタンをクリックして、更に右ボタンをクリックすると表示されるメニューから メンバ関数の追加 を選択すると、下のメンバ関数の入力画面となる。
ここで,関数の型はintを入力し,関数の宣言にはgcdivisor(int n, int m)を入力する。最後に,アクセス制御はPrivateのラジオボタンをチェックする。
C 言語の場合に int gcdivisor(int n, int m) となる関数の宣言をするためには次のようにすればよい。
関数型 | int |
関数宣言 | divisor(int n, int m) |
アクセス | private |
divisor は CGCD1Dlg.cpp の中だけで必要な関数であるため、アクセスは private とする。設定すると、関数 gcdivisor の編集モードに自動的に移行する。
設定したのは CGCD1Dlg のメンバー関数であるため, int divisor(int n, int m) ではなく、
int CGCD1Dlg::gcdivisor(int n, int m)
になっている。 C++では,クラスの中でメンバ関数を宣言するときには,スコープ解決子::はいらないが,クラスの外で,メンバ関数を宣言するときには,どのクラスに属しているかを知らせるために, クラス名::関数名 という書き方をする。 さて,最後にgcdivisor()関数の中身を書く。
=======================================================
int CGCD1Dlg::gcdivisor(int n, int m)
{
int c;
while(n%m){
c = n%m;
n = m;
m = c;
}
return m;
}
void CGCD1Dlg::OnButton2()
{
m_sEdit = "";
m_Output = 0;
UpdateData(FALSE);
}
=======================================================