next up previous contents index
: 最小2乗近似直線 : 関数の編集 : レイアウト   目次   索引

プログラムの実装手順

クラス関数の設定

今度はボタンを選択状態にして (マウスでクリックして)、 ClassWizard をたちあげて、メッセージマップを見る。

Button1をクリックすると,メンバ関数の追加のダイアログがでるので,OKボタンをクリックすると,次のようなOnButton1()イベントハンドラが表示されるので,$ \{ \}$の中に以下のようなコードを記述する。

\framebox{
\begin{tabular}{l}
void CDialog1Dlg::OnButton1() \\
\{\\
\hspace{1...
...ODO: この位置にコントロール通知ハンドラ用のコードを追加する\\
\}
\end{tabular}} =======================================================
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);
}
=======================================================

ユーザ関数の設定

まずヘッダーに次の書き込みをします。

\framebox{
\begin{tabular}{l}
// GCD1Dlg.cpp : インプリメンテーション ファイル\...
...g.h''\\
\char93 include $<$sstream$>$\\
using namespace std;\\
\end{tabular}} Private関数の挿入

関数 gcdivisor のスケルトンを CGCD1Dlg.cppに付け加えます。このために ClassView から CGCD1Dlgをマウスの左ボタンをクリックして、更に右ボタンをクリックすると表示されるメニューから メンバ関数の追加 を選択すると、下のメンバ関数の入力画面となる。

図 7.3:
\begin{figure}\begin{center}
\includegraphics[width=12cm]{FIG/figure7-3.eps}
\end{center}\vspace{-0.6cm}
\end{figure}
ここで,関数の型は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 の編集モードに自動的に移行する。

\framebox{
\begin{tabular}{l}
void CDialog1Dlg::OnButton1() \\
\{ \\
\hspace{1...
...
\}\\
\par
int CGCD1Dlg::gcdivisor(int n, int m)\\
\{\\
\\
\}
\end{tabular}}

設定したのは 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);
}
=======================================================


next up previous contents index
: 最小2乗近似直線 : 関数の編集 : レイアウト   目次   索引
Administrator 平成16年7月8日