#pragma twice

KAB-studio > プログラミング > #pragma twice > 022 Version 2.11 関数を使おう!

#pragma twice 022 Version 2.11 関数を使おう!

前のページへ 表紙・目次へ 次のページへ

 Version 2.11
関数を使おう!

さて今回は、関数の使い方
って、この前作ったのに、使い方なんて楽勝じゃない?
それは逆。自分で作った関数だから使えたんで、人が作った関数はどう?
確かに、あたしが作ったレシピあげても、誰も料理作んないのよねー
……そういえば最近、金菜先輩を見かけない……
で、使い方って?
そうだね、まずは MessageBox() を使ってみようか

void CCalcDlg::OnBEqual() 
{
    MessageBox( "あいうえお" );
}

これって、確かダイアログ表示するんだよね
そ。で、この関数の使い方を調べてみましょう
調べるって?
まず MessageBox の上でダブルクリックして
はい、ダブルクリック
そしたらF1キー
F1キー……あれ?
 新しくアプリケーションが立ち上がる。〈MSDN ライブラリ Visual C++ 
6.0〉というウィンドウ名。さらに〈該当するトピック〉というダイアログ
が表示される。
この中の CWnd::MessageBox() をダブルクリックしてみて
ダブルクリックっと
 〈MSDN ライブラリ〉に文章が表示される。CWnd::MessageBox と書かれて
いる。
これが、 MessageBox() の情報?
そういうこと。このアプリは〈MSDN〉って言って、プログラミングに
ついてのいろんな情報が詰まってるんだよ
だからこの関数のことも載ってるってことなんだ。……でも、見ても全然
わかんないよ
もちろん。これから見方を紹介するから。えっと、こんなふうに書いてあ
るでしょ

int                                         //戻り値。
    MessageBox                              //関数名。
        ( LPCTSTR lpszText                  //引数1。
        , LPCTSTR lpszCaption = NULL        //引数2。
        , UINT nType = MB_OK );             //引数3。

これは〈この関数をどういうふうに使えるのか〉ってことを表してます
使い方マニュアルみたいな?
そういうこと。これと、さっきの〈使用例〉を見比べてみようか

    MessageBox( "あいうえお" );

なんとなく分かるけど……えっと、質問
はい、火美ちゃん
戻り値、受け取らなくていいの?
うん、いいの。前回の Test() のときもね
引数の LPCTSTR ってなに?
〈文字列〉を入れる変数だよーっていう意味。とりあえず暗記してね
だから "あいうえお" っていう文字列を渡せるんだ
ちなみにこの LPCTSTR とか int とかを〈型〉っていいます。だからいつ
もの iBox は〈int 型の変数〉ってことだね
ふーん。でさ、引数、数合わないけど?
実は引数は〈省略〉できるんです。だからこの前の関数を

int Test( int iBox = 0 )
{
    return iBox + 1;
}

みたいにすると……
 = 0 が付いてるね

void CCalcDlg::OnBEqual() 
{
    int iBox
        = Test();   //引数なし。
    TRACE( "戻り値は %d です。\n", iBox );
    //  戻り値は 1 です。
}

みたいに、引数を省略できます。もちろん引数を付けてもいいんだよ
省略したら、上のなら0が入ってるってことね
そ。こういうのを〈デフォルト引数〉っていいます
まんまね〜。じゃ、MessageBox() の2番目の引数、つけていい?
うん、やってみ?
……引数2つ付けるときって、どうすればいいんだっけ
〈 , 〉だよ。TRACE() で使ってるでしょ
あ、そうだった。2番目の引数の……かた、も、LPCTSTR だから、文字列
を渡すってことで、ってことは、こう?

void CCalcDlg::OnBEqual() 
{
    MessageBox( "あいうえお", "かきくけこ" );
}

ビルドして実行っと。あ!
 いつもの小さなダイアログが表示されるが、今度はタイトルがかきくけ
になっている。
よーするに、ひとつめが中の文で、ふたつめがタイトルってことなのねー
ここで、MSDNの方、見返してみようか
あ、そっか、ちゃんとこっちに〈2番目の引数はタイトルの文字です〉み
たいなことが書いてあるのねきっと。えっと、〈引数〉の……?
第2引数は lpszCaption だったでしょ。そこのとこ読んでみ
あ、引数の変数の名前で見るんだ。えっと……

(MSDNからの引用)
lpszCaption

メッセージ ボックスのキャプションとして使われる CString または NULL 
で終わる文字列を指します。lpszCaption が NULL の場合は、デフォルトの
キャプションである "Error" が使われます。
(MSDNからの引用 ここまで)

いまいち分かんない……用語の違いはいいけど、これ見ても "あいうえお"
渡してってこと、分かんないなー
ここでは〈NULL で終わる文字列〉がその意味だから。だから、これが出
てきたら "あいうえお" を渡せるよってしちゃえばたいがい大丈夫だから
なーんかしっくりこないなー
確かにねー。ただね、この辺には勉強しなきゃいけない部分がいっぱいあ
るんだわ
げげ
分かればしっくりくるんだけどね。とりあえず、今は我慢
はーい。ところでさ、 NULL ってなに?
これは〈ぬる〉って読んで、ようするに〈何もない文字列〉ってとこかな
そういえば、省略されてるときにこれが渡されてるね……って、あれ?
どうしたの?

void CCalcDlg::OnBEqual() 
{
    MessageBox( "あいうえお", NULL );
}

ビルドしてじっこー!
 ダイアログが表示される。タイトルはCALC
これウソツキ!!  Error なんて表示されないじゃん!
あ、ホントだ……ま、実際のところ、ドキュメントは信じないで、自分で
試した方がいいってことかな
変なの〜
しょうがないよ、プログラマーはドキュメントに振り回される生き物だか
ら……
なに黄昏ちゃってるのよ
じゃーさ、第3引数、なに渡せばいいのかわかる?
え……えっと、このウソツキによるとですねー、内容と動作を指定するそ
うです。何かを渡すことで。……なに渡せばいーんだろーね
ま、そーゆーことだね。ちなみに渡せるのは、〈メッセージボックス ス
タイル〉のページに書いてあるの
あ、リンク張ってあるね
 MB_OK とか書かれてるでしょ
あ、これ省略された時に渡されてるのだ
代わりに MB_ICONQUESTION を渡してみようか
はーい

void CCalcDlg::OnBEqual() 
{
    MessageBox( "あいうえお", MB_ICONQUESTION );
}


ビルドして実行! あれ? エラー出ちゃったよ?
引数は、真ん中だけ省略するってことはできないの。だから第2引数も
ちゃんと書かなきゃダメ
めんどー。まあいいけどー

void CCalcDlg::OnBEqual() 
{
    MessageBox( "あいうえお", "かきくけこ", MB_ICONQUESTION );
}

ビルドして実行、っと。あ!
 ダイアログの左側に〈?〉というマークが表示されている。
へー、ここ変えるだけでこんなふうになるんだー
他にもいっぱいあるでしょ
あ、ちゃんと MB_ICONQUESTION は疑問符を表示する、って書いてあるね。
あと MB_ICONSTOP とか……
そうだ、 MB_YESNO 試してみ?

void CCalcDlg::OnBEqual() 
{
    MessageBox( "あいうえお", "かきくけこ", MB_YESNO );
}

ビルドして実行っと。あ、ボタンがふたつ!
 表示されたダイアログにははいいいえのふたつのボタンが表示
されている。
このときの関数の戻り値は何かな?
え……えっと、どうするんだっけ
じゃ、問題
げー。えっとねー、まず変数に受け取るのよね……受け取っちゃえば、あ
とは TRACE() で表示すればいいんだから

void CCalcDlg::OnBEqual() 
{
    int iBox
        = MessageBox( "あいうえお", "かきくけこ", MB_YESNO );
    TRACE( "%d\n", iBox );
}

ビルドして実行。あれ、7だって
〈はい〉を選んだら?
あ、6! へ〜、選んだボタンで戻り値が変わるんだ
そういうこと。これと if で、簡単なアドベンチャーゲームとか作れるで
しょ
あ、作れる作れる!! なんか……なんかすごい!
ここまで下積みしてきて良かったでしょ
うんうん! あれ、でもさ、さっきのアイコンと、このボタンふたつ、一
緒にできないの?
そういうときには、〈 | 〉を使います
なに、これ
¥マークの上、BSキーの左のね

void CCalcDlg::OnBEqual() 
{
    MessageBox( "あいうえお", "かきくけこ"
                , MB_YESNO | MB_ICONQUESTION );
}

って感じにすると、一緒に渡せるから
へ〜……また分かんなくなっちゃった
簡単にまとめれば、引数と戻り値の〈型〉をチェックするのが最優先
int だったら int の変数、 LPCTSTR なら文字、みたいな?
そう。っていっても最初はそこら辺が難しいんだけどね
あと NULL とか | とかも使ったね
そんなとこかな。ちょっと難しいけど、どう?
うん、難しいけど、関数は面白いかも!
ちなみに、関数は昔〈函数〉って書いたんだよね
はこだてーって感じ
そう、それ!!
な、なに?
数学のもそうなんだけど、関数って〈データを渡して、処理をして、数字
を返す〉っていうもので
MessageBox() なら、タイトルとか渡して、ダイアログ表示して、数字を
返す、ってとこねー
そういうのを昔の人は〈数字の出てくる、中身の見えない箱〉に例えたわ
け。で、昔は箱を函って書いたから
だから函数?
そ。色々あって字体が変わったときに、函が関になっちゃったんだよね
確かに、ダイアログ自体、箱って感じするし、箱があって、ボタン押すと、
数字が出てくる……自動販売機みたい
実際そんな感じかな。今日は勉強になった?
うん!
ちなみに今の〈函数〉の逸話はウソです
なんですと!?

/*
    Preview Next Story!
*/
Function に似た音の漢字を当てて〈函数〉、ってのがホント
う、ウソつかれちゃうし
でも関数のこと、もう忘れないでしょ
ま〜、そーだけどさー
というわけで次回
< Version 2.12 ソースファイルとヘッダーファイル >
につづく!!
うわ、イタメールが!
……
うわ、フリーズした!
……
うわ、レポートが!!
……(ニヤリ)
 
del.icio.us 登録する
Yahoo!ブックマーク 詳細を表示 users
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
RSSに登録
del.icio.us 登録する
Yahoo!ブックマーク 詳細を表示 users
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
 
このページは、Visual C++ 6.0を用いた C++ 言語プログラミングの解説を行う#pragma twiceの一コンテンツです。
詳しい説明は#pragma twiceのトップページをご覧ください。