
/*
    KAB-studio.h
        　ＫＡＢ−ｓｔｕｄｉｏで先週更新した内容
        が格納されたヘッダーファイルです（笑）。

    (C)KAB-studio ALL RIGHTS RESERVED.
        http://www2.justnet.ne.jp/~kabstudio/
        kab-studio@multimedia.design.co.jp

    送信日： 1999/08/30(Mon) No.021
    配信数： 2710（ Mag2 + Pubzine ）
＊    発行元： まぐまぐ( URL: http://www.mag2.com/  ID: 0000012198 )
＊    発行元： Pubzine( URL: http://www.pubzine.com/  ID: 590 )
*/


/*                        今週の「どう？」                    */

『じゃ、次のお便り』
「ってゆーかないんだよねー」
『なんですってー！！』
「なんか拍子抜けかも……」
『かぶスタでは皆さんのご意見ご希望ご感想をお待ちしてます！　宛先は』
http://www2.justnet.ne.jp/~kabstudio/Info/MailMagazine/Impression/
「のページで送ってください」
『お待ちしてまーす！』



/*            １９９９年８月３０日（月）の更新                */

・更新ナシ。
　あああ、今週は更新できませんでした。ゴメンです。


/*                チョー普通な日記                */

１９９９年８月２２日（日）：
　プロバイダ設定＆テレホで大失敗！　半月くらいのあいだ、電話代がかな
り……。

１９９９年８月２３日（月）：
　安全に空を飛ぶ方法、その１。

１９９９年８月２４日（火）：
　安全に空を飛ぶ方法、その２＜これだけ見るとなんか合法ドラッグの紹介
みたいっすね（爆）。ちなみにＳＦの話です。

１９９９年８月２５日（水）：
　旅行前。疲れたっぷりが分かる内容です。ええ。

１９９９年８月２６日（木）：
　お休み

１９９９年８月２７日（金）：
　お休み

１９９９年８月２８日（土）：
　ほとんどお休み。



/*                    金菜さんの憂鬱                        */

１９９９年８月２２日（日）：
キャスト・最終回
const_cast は const ポインタを非 const ポインタにキャスト
reinterpret_cast はそれ以外のポインタ関係のキャストを
static_cast はさらにそれ以外のキャスト
dynamic_cast は継承関係のキャスト
Ｃ＋＋の鍵は「制限」
キャスト演算子もそのひとつ

１９９９年８月２３日（月）：
ＫＴＬについて
自作のフリーライブラリ
脱ＭＦＣ
お便り
ツールバーとダイアログバーを固定したい
CFrameWnd::DockControlBar() をコメントアウト

１９９９年８月２４日（火）：
ＫＴＬについて
テンプレートはそれ自体はコードとは見なされない
サンプルコード
呼び出しさえしていなければコンパイルに通る
お便り
ニューごみ箱について
バグだった
おまけ
自プロセスのトップウィンドウを取得する関数（ＳＴＬ使用バージョン）
サンプルコード

１９９９年８月２５日（水）：
ＫＴＬについて
「普通の関数を関数テンプレートにするのは難しい」
関数テンプレートはテンプレート引数を関数の引数に使わなくてはならない
「クラステンプレート関数」
クラステンプレートで関数テンプレートとしての制限を取り払う
戻り値を必ず受け取らなきゃいけない
明日とあさってはお休み

１９９９年８月２６日（木）：
お休み

１９９９年８月２７日（金）：
お休み

１９９９年８月２８日（土）：
お休み




/*                    #pragma twice                        */


　Version 2.10
関数を作ろう！


「さて、今回は〈関数〉」
『かんすー？』
「そ。英語では Function ね」
『ふぁんくしょん』
「そう。関数っていうのは、前に使った MessageBox() とか、あとこれまで
ずっと使ってきた」

void CCalcDlg::OnBEqual() 
{
}

「も関数のひとつ」
『これがいっぱい集まって、プログラムができてるとか言ってたよね』
「そう。だから一番大事なところかも。しっかりマスターしなきゃね」
『はーい』
「というわけで、関数を作ってみましょう」
『ええっ？？　そんな簡単に作れるもんなの？』
「作れちゃうんだよね、これが」

//    これが新しく作った関数！
void Test()
{
    TRACE( "テストでーす\n" );
}

//    今までの関数。
void CCalcDlg::OnBEqual() 
{
    Test();    //上の関数を呼びだしてます。
}

『下のは今までのと同じだよね。上のが新しい関数なんだ』
「そ。これを順序ごとに見ると、」

void Test()
{
    //    ２
    TRACE( "テストでーす\n" );    //３
    //    ４
}

void CCalcDlg::OnBEqual() 
{
    //    １
    Test();    //上の関数へ。
    //    ５
}

「って順番かな。あ、もしよく分からなかったら、Ver.2.3 や 2.5 で使っ
たブレークポイントとかで、どんなふうに進むのか実際に試してみてね」
『……あのさー、これって、意味なくない？』
「っていうと？」
『だって、これと同じじゃない』

void CCalcDlg::OnBEqual() 
{
    //    １
//    Test();
    {
        //    ２
        TRACE( "テストでーす\n" );    //３
        //    ４
    }
    //    ５
}

「そうだよ」
『そうだよってねー……』
「でもさ、ちゃんとメリットもあるんだよ。たとえば変数とか。とりあえず
これ試してみて」

void CCalcDlg::OnBEqual() 
{
    int iBox
        = 0;
    int iBox    //エラー！
        = 0;
}

『あ、ビルドしたらエラーが出た』
「こんなふうに、同じ名前の変数はいくつも作れないんだけど、関数を使う
と……」

void Test()
{
    int iBox
        = 0;
    TRACE( "テストでーす\n" );
}

void CCalcDlg::OnBEqual() 
{
    int iBox
        = 0;
    Test();
}

『あ、今度は大丈夫！　なんで？』
「これは、関数はそれぞれ完全に独立してるから」
『どゆこと？』
「続いてこれも試してみましょう」

void Test()
{
    iBox = 100;    //エラー！
    TRACE( "テストでーす\n" );
}

void CCalcDlg::OnBEqual() 
{
    int iBox
        = 0;
    Test();
}

『あれ？　エラー出ちゃったよ』
「つまり、 CCalcDlg::OnBEqual() の中で作った iBox って変数は、Test()
の中じゃ影も形もないってこと」
『あ、それが〈独立してる〉ってことなんだ』
「プログラムが大きくなってくると問題になるのが、変数がいつの間にか書
き換えられちゃうこと。でも、小さい関数をいっぱい作るようにすれば、書
き換えられる範囲が特定できるでしょ」
『確かにおっきな水槽に金魚入れとくといつの間にかいなくなっちゃったり
するけど、ちっちゃな金魚鉢ならそういうことないもんね』
「……まあ、そういうことかな。で、もうひとつのメリット」

void Test()
{
    TRACE( "テストでーす\n" );
}

void CCalcDlg::OnBEqual() 
{
    Test();
    TRACE( "テストでーす、２！\n" );
}

『ん？　これってなんの変哲もないプログラムって感じ。 TRACE() を両方
で使ってるだけよね』
「その TRACE() 、これも関数みたいなもんなんだけど、もしこの TRACE() 
と同じ機能を持つプログラムを貼り付けるとしたら？」
『あ、それ面倒……』
「関数にすると、こういうふうにいろんなところから何度でも呼べるように
なるから、実際にプログラムとして書くよりもずっと楽でしょ」
『だから関数にした方がいいってことね〜』
「そういうこと。まとめると、関数はそれぞれが独立してて、お互いを呼び
合ってプログラムを構成してます」
『その関数を作っていって、組み上げるってことがプログラミングってこと
ね。でもさ、素朴な疑問なんだけど……』
「なに？」
『独立してるんだったら、ものすごく困んない？　たとえばロボットとかな
ら、腕と胴体とか、シャフトとかコードとかで継ながってるよね』
「そう。関数にも、そういう〈関数どうしでデータをやりとりする方法〉が
ちゃんとあります。たとえば TRACE() に "テストでーす\n" を渡してるよ
うにね」
『あ、これがそうなんだ』
「そう。この渡すものを〈引数〉っていいます」
『ひきすう？』

void Test
        ( int iBox )    //これが引数！
{
    TRACE( "引数は %d です。\n", iBox );
    //    引数は 100 です。
}

void CCalcDlg::OnBEqual() 
{
    Test( 100 );
}

「この int iBox が引数」
『あれ？　これって変数作るのと同じだね』
「そう、これまでの int iBox と同じ、変数を作ってるだけ。だから、
Test( 100 ); のところの引数は int iBox = 100 ってしてるってことかな」
『変数作ってそこに数字入れてるんだ。こうやって情報を渡せるのねー』
「もちろん iBox は普通の変数と同じだから、計算とかもできるから。で、
もうひとつの方法、〈戻り値〉も見ておこうか」
『もどりち？』

int     //これが戻り値！
    Test()
{
    return 100;    //戻り値を返します。
}

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

『void っていうのが int になったね』
「そう。これを int にすることで〈数字を返すよ！〉っていう意味になる
わけ」
『返すって？』
「前に〈置き換える〉っていうのあったでしょ」
『 3 < 5 が 1 に、 3 > 5 が 0 に置き換わるってヤツ？』
「そうそう。これと同じで、ここでは〈 Test() は呼び出したあと数字に置
き換わります〉ってことになるわけだね」
『へー。で、Test(); が１００に置き換わって、それが iBox に入るってこ
とね。その１００を返してるのが、return ってこと？』
「そう。return を使うと、そこで関数が終わって、return に渡した値を戻
り値にします」
『ふーん』
「じゃ、問題」
『げ！』
「引数に数字を取って、それを１増やして、戻り値として返す関数を作って
みて」
『え、えっと……ってことは、引数も戻り値も、 int でいいんだから……』

int Test( int iBox )

『みたいな感じにして…… return に変数って使えるの？』
「もちろん！」
『ってことは……』

{
    return iBox + 1;
}

『ってすれば、戻り値は引数に１足したのになるから……これで終わり？』
「そ。まとめると？」
『こんな感じかな』

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

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

『ビルドして実行……ちゃんと１増えてる！！』
「どう？　関数を作ってみた感じは」
『とりあえず楽勝って感じ？』



/*
    Preview Next Story!
*/
『関数作ったら、今度は？』
「今度は使い方」
『それって順序逆じゃない？』
「そうとも言えないんだよねー」
『というわけで次回』
＜ Version 2.11 関数を使おう！ ＞
「につづく！！」
『なんか、教える順番ぐちゃぐちゃじゃない？』
「ぎくっ」



/*            １９９９年９月６日（月）の更新予定                */

・表紙を９月バージョンに！
　毎月恒例、新しい表紙です。しかし、まだ原画さえ完成してない（汗）。
間に合うかなー、ギリギリだなー。



/*                        ご注意！！                        */

・このメールを返信しないでください。
・感想は下のページから送ってください。
http://www2.justnet.ne.jp/~kabstudio/Info/MailMagazine/Impression/
・購読登録を解除したいときには下のページで行なってください。
＊http://www.mag2.com/m/0000012198.htm
＊http://www.pubzine.com/detail.asp?id=000590
・解除は自分で行なってください。
・バックナンバーは下のページにあります。
http://bigbeat.tegami.com/~mgsearch/frame.cgi?id=0000012198
http://www2.justnet.ne.jp/~kabstudio/Freeware/start.html#MailMagazine

/*
    KAB-studio.h
    Weekly Mail Magazine.
    Written by Kaburaya Seiden.

    (C)KAB-studio ALL RIGHTS RESERVED.
        http://www2.justnet.ne.jp/~kabstudio/
        kab-studio@multimedia.design.co.jp
*/


/*                    See you next week!!                    */


