////////////////////////////////////////////////////////////////////
━いーくちこむ━━━━━━━━━━━━━━━━━━━━━━
★お取寄せ品の口コミサイトいーくちこむ
消費者の声と写真記事で通販商品の試食結果をご紹介しています
掲載商品募集中です！詳しくは↓
http://af1.mag2.com/m/af/0000008658/001/s00000003746004/009  
━━━━━━━━━━━━━━━e-cuchi.com━━━━━━━━
////////////////////////////////////////////////////////////////////
/*

    KAB-studio.h


    (C)KAB-studio 1999 - 2006 ALL RIGHTS RESERVED.
        http://www.kab-studio.biz/
        info@mail.kab-studio.biz

    送信日： 2006/10/02(Mon) No.376
    配信数： 1706
    発行元： まぐまぐ ( URL: http://www.mag2.com/  ID: 0000012198 )
*/
////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////
// NEW!!
http://www.kab-studio.biz/index.html

2006/10/02 (Mon)
　ほとはー外伝３にP.73を追加！
[ 三人合体ホットハーブ 外伝３ 【ワタシ の キロク】 ]
http://www.kab-studio.biz/Comic/HotHerbA3/index.html

2006/10/02 (Mon)
　#pragma twice ホームページ版にアーカイブ追加！
16.28 関数の代わりに static メンバ関数
17.01 クラスの継承
[ #pragma twice ]
http://www.kab-studio.biz/Programing/PragmaTwice/index.html


////////////////////////////////////////////////////////////////////
// ちょお普通な日記
http://www.kab-studio.biz/nikki2/index.html

2006/09/24 (Sun)
　朝８時半に起きて午後２時起き。体中筋肉痛。お昼は楽天対西武戦を観戦。
野球が面白い！　ほとはー外伝３リニューアル。ビジネスモデルの実験。

2006/09/25 (Mon)
　10時半起き。体がぎしぎし。午前中洗濯。午後は横浜で買い物。カメラの
本探し。おしごとが10月にありそう。

2006/09/26 (Tue)
　私用で立川へ。8時半に帰ってきてぐだー。来週におしごとの話が。

2006/09/27 (Wed)
　10時半起き。起きられない。2時に横浜でまた買い物。帰ってからは
ソフトバンク対日本ハム。パースについてまとまらない。やりたいことが
ぐちゃってる。

2006/09/28 (Thu)
　10時起き。ドンキで烏龍茶とキャラット購入。午後はMachician用語機能
を追加。ほとはー外伝３にも応用予定。夜は久々プール。

2006/09/29 (Fri)
　10時起き。ダイエットで体力が。ほとはー外伝３来週分完成。Amazonで本
とゲーム購入。積まないようにしないと。

2006/09/30 (Sat)
　9時に起きられた。ぷらとわ書き。ぷらとわ、これからの予定。夜はプール
も疲れまくり。あとはまったり。


////////////////////////////////////////////////////////////////////
// かぶろぐ。
http://d.hatena.ne.jp/kab_studio/

2006/09/24 (Sun)
http://d.hatena.ne.jp/kab_studio/20060924
帰ってきた。
起きた。
[KAB-studio]ぷらとわ追加。
[KAB-studio][ほとはー]ほとはー外伝３ P.72
[アニメ]「牙」 第26話「孤独な記憶」
[アニメ]おねがいマイメロディ〜くるくるシャッフル！〜 
　第26話「委員長になれたらイイナ！」
[アニメ]ひぐらしのなく頃に 第25話「罪滅し編　其の四　地球侵略」

2006/09/25 (Mon)
http://d.hatena.ne.jp/kab_studio/20060925
お、おき……（がくっ）。
帰ってきた。
[買][装備]コミックス＆アンチきらら＆ガジェット色々。
[きらら]まんが4コマKINGSぱれっと Vol.1
[アニメ]ARIA The NATURAL 第26話「その　白いやさしい街から…」(終)
[アニメ]ゼロの使い魔 第13話「虚無のルイズ」(終)
[アニメ]うたわれるもの 第25話「太古の夢跡」

2006/09/26 (Tue)
http://d.hatena.ne.jp/kab_studio/20060926
起きた。
帰ってきた。
[アニメ]N・H・Kにようこそ！ 第12話「オフ会にようこそ！」

2006/09/27 (Wed)
http://d.hatena.ne.jp/kab_studio/20060927
起きた……
[買][きらら]スズナリ！＆GA購入
[買]コミックス購入。
[アニメ]桜蘭高校ホスト部 第26話「これが俺達の桜蘭祭」(終)

2006/09/28 (Thu)
http://d.hatena.ne.jp/kab_studio/20060928
起きた。
[KAB-studio][Machician]用語機能仮組
[アニメ]ゼーガペイン 第26話「森羅万象（ありとあらゆるもの）」(終)
[アニメ]イノセント・ヴィーナス 第8話「喪失」
[きらら]まんがタイムきららCarat 2006年11月号
[水泳ダイエット]9月8回目

2006/09/29 (Fri)
http://d.hatena.ne.jp/kab_studio/20060929
起きた
[アニメ]ザ・サード 〜蒼い瞳の少女〜 第20話「死線を越えて」
[買]Amazonで購入。

2006/09/30 (Sat)
http://d.hatena.ne.jp/kab_studio/20060930
起きたよ。
[水泳ダイエット]9月9回目
[アニメ]彩雲国物語 第22話「命あっての物種」
[アニメ]おとぎ銃士 赤ずきん 第14話「おかしな森の記憶」
[アニメ]ふしぎ星の☆ふたご姫 Gyu! 
　第27話「天使を救え！☆暗黒のプリンス」


////////////////////////////////////////////////////////////////////
// Ajaxでエロゲーを作るブログ
http://d.hatena.ne.jp/AjaxEroge/

（今週はお休みです）


////////////////////////////////////////////////////////////////////
// 風雅、舞い
http://www.kab-studio.biz/Novel/Fuga/index.html

■　第十五章　濁る澱み、清らかな血溜り　−４−

　トラックがインターを降りた所で、舞は目を覚ます。
「あ……寝ちゃってすみません」
「いいのよ気にしないで。どうせ代わってもらえないんだし」
「それはそうなんですけど……」
　外は完全な闇。時計は夜７時を回っていた。
「今どの辺です？」
「あと２時間で町に着く、ってところ」
「まだ２時間も……町って？」
「彼のご両親がいた村にはこのトラックじゃ入れないから、直前の町で一泊
してそれから徒歩で行くの」
「あれ、先生って……」
「もちろん行ったことあるわよ。左さんに言われた時は半信半疑だったけ
ど、あんな山村に本当に適性者がいるんだから不思議よね」
「適性……」
　少年の両親、そのふたりもＡＰになっていた。
「そのふたりって」
「その話はなしよ。知りたいなら彼に聞いて」
「約束、っていうのですか？」
「約束じゃないわ、契約、よ。命を掛けたね」
「……先生って大変ですね」
「あなたたち前線ほどじゃないわよ。私としては、リスク以上に見返りがあ
ると思っているし」
　不自由のない生活と倫理的に許されない研究は、怠惰な日々と安全を捨て
るだけの理由になった。
「ここに彼の母親がいるっていうのは確実なんですか」
「逃走した方角から考えて間違いなく、ね。何より、彼がそう思っているん
だし」
「ですね」
「ただ、あの村って広いのよね。家にいてくれればいいんだけど……それ
か、何か大事になってるか」
「あの、彼女を追う一番の目的ってなんですか？」
　智子は、少し考えてから、
「貴重な実験材料を取り戻しに来た、じゃ駄目？」
　と答えた。
                                                              (続く)

////////////////////////////////////////////////////////////////////
// JavaA2Z
http://www.kab-studio.biz/Programing/JavaA2Z/index.html

■追加・更新単語

（今週の追加はありません）


////////////////////////////////////////////////////////////////////
━いーくちこむ━━━━━━━━━━━━━━━━━━━━━━
★お取寄せ品の口コミサイトいーくちこむ
消費者の声と写真記事で通販商品の試食結果をご紹介しています
掲載商品募集中です！詳しくは↓
http://af1.mag2.com/m/af/0000008658/001/s00000003746004/009  
━━━━━━━━━━━━━━━e-cuchi.com━━━━━━━━
////////////////////////////////////////////////////////////////////
// #pragma twice
http://www.kab-studio.biz/Programing/PragmaTwice/index.html

　Version 17.21
new / delete とポリモーフィズム

「前回は、インターフェイスを戻り値の型にする方法を説明しました」
『引数じゃなく戻り値でもできるわけね』
「戻り値にすることで、前回のプログラムを例にすると」

    // まずデバッグ用を受け取ります。
    pcPrinter = GetPrinterInstance( DEBUG_PRINTER );
    // 出力します。
    pcPrinter->Output( "あいうえお\n" );
//  ↑ CDebugPrinter::Output() が呼ばれます。

    // 次にダイアログ用を受け取ります。
    pcPrinter = GetPrinterInstance( DLG_PRINTER );
    // 出力します。
    pcPrinter->Output( "あいうえお\n" );
//  ↑ CDlgPrinter::Output() が呼ばれます。

「と、同じ Output() メンバ関数を呼び出していますが、実際には 
GetPrinterInstance() 関数で取得したクラスのメンバ関数を呼び出してい
ます」
『ポリモーフィズムしてるわけね』
「これは実は、引数でインターフェイスを使う時よりも応用範囲が広いんで
す。今回みたいに〈処理が似ているものを切り替えたい〉場合に使うことが
できます」
『処理が似ているもの？』
「たとえば」

・デバッグ出力
・ダイアログ出力
・ファイル出力
・ネットワーク出力

「みたいな出力系」
『考えてみたら出力って文字列渡すだけだから簡単にできるんだね』
「こういう場合、たとえば次のようなプログラムを組むこともできます」

    // 現在のモードを取っておきます。
    int iMode = DEBUG_PRINTER;        // デバッグ出力。
    // int iMode = DEBUG_PRINTER;    // ダイアログ出力。

    // ...

    // エラーが発生したのでメッセージを出力します。
    if( iMode == DEBUG_PRINTER )
    {
        //  デバッグモードなのでデバッグ出力します。
        OutputDebugString( "エラーです。" );
    }
    else
    {
        // ダイアログモードなのでダイアログ出力に出力します。
        MessageBox( NULL, "エラーです。", "デバッグ", MB_OK );
    }

『あー、 if で切り替えるわけね』
「でもこの方法だと、出力箇所ごとにこういうチェックが必要になります」
『でも、ポリモーフィズムを使えばそれが必要ない！』
「というわけ。ポリモーフィズムには、こんな感じに〈似た処理をまとめて
切り替える〉ことにも使えるわけです」
『なるほど、こういう使い方が分かってくると色々便利ねー』
「ただ、このように戻り値で返す方法には、大きな問題があります。今回の
例では以下のように変数を作成しました」

// 「出力」クラスを返す関数。
// 引数が DEBUG_PRINTER なら CDebugPrinter クラスのポインタを、
// DLG_PRINTER なら CDlgPrinter クラスのポインタを返します。
CPrinter *GetPrinterInstance( int p_iFlag )
{
    // 両クラスの変数を static 変数として作っておきます。
    static CDebugPrinter cDebugPrinter;
    static CDlgPrinter cDlgPrinter;

    // フラグによって出力を変更します。
    if( p_iFlag == DEBUG_PRINTER )
    {
        return &cDebugPrinter;
    }
    // else
    return &cDlgPrinter;
}

「このように、変数を static 変数として作成して、そのアドレスを返して
いました」
『そうしないと関数から抜けたときに消えちゃうもんね』

CPrinter *GetPrinterInstance( int p_iFlag )
{
    ↓ static 変数にしなかった場合……
    CDlgPrinter cDlgPrinter;

    return &cDlgPrinter;  ←ここで cDlgPrinter 変数がなくなります。
    ↑ということは、返されたアドレスは変数ではない場所を指している
      ので、無効なアドレスということになります。
}

「これを避けるために、 static 変数にしているわけです。 static 変数は 
Version 6.02 ( No.102 ) で説明したとおり〈関数内で一度作られたらなく
ならない〉変数なので、アドレスが無効になることはありません」

CPrinter *GetPrinterInstance( int p_iFlag )
{
    ↓ static 変数にした場合……
    static CDlgPrinter cDlgPrinter;

    return &cDlgPrinter;  ← cDlgPrinter 変数はなくなりません。
    ↑返されたアドレスはちゃんと cDlgPrinter 変数を指します。
}

『だから static にしてたわけだね。でもなんか不自然……』
「そうだね、一番の問題はもし CDlgPrinter クラスや CDlgPrinter クラス
にメンバ変数があった場合に共有されちゃうこと」
『げ、そうじゃん！』

    pcPrinter = GetPrinterInstance( DEBUG_PRINTER );
    pcPrinter = GetPrinterInstance( DEBUG_PRINTER );
    pcPrinter = GetPrinterInstance( DEBUG_PRINTER );
    ↑どれも同じ変数のアドレスを持っているわけです。

『同じ変数を使い回すわけだから、メンバ変数が作れない……ってことは、 
GetPrinterInstance() 関数呼ぶたびに別の変数を作ってもらう必要があるっ
てことね』
「そう、その方法は？」
『 new ！』
「そう！　new を使えばいいわけです。まず、 GetPrinterInstance() 関数
ではこんな感じに new で変数を作って返します」

// 「出力」クラスを返す関数。
// 引数が DEBUG_PRINTER なら CDebugPrinter クラスのポインタを、
// DLG_PRINTER なら CDlgPrinter クラスのポインタを返します。
CPrinter *GetPrinterInstance( int p_iFlag )
{
    // フラグによって出力を変更します。
    if( p_iFlag == DEBUG_PRINTER )
    {
        return new CDebugPrinter;
    }
    // else
    return new CDlgPrinter;
}

『 static 変数を使わないで、 new でその場で変数作っちゃうわけね』
「使う側は、使用後に必ず delete します」

int WINAPI WinMain
    ( HINSTANCE p_hInstance
    , HINSTANCE p_hPrevInstance
    , LPSTR p_pchCmdLine
    , int p_iCmdShow
    )
{
    // 出力用に、 CPrinter クラスのポインタを受け取ります。
    CPrinter *pcPrinter;

    // まずデバッグ用を受け取ります。
    pcPrinter = GetPrinterInstance( DEBUG_PRINTER );
    // 出力します。
    pcPrinter->Output( "あいうえお\n" );
    // 解放します。
    delete pcPrinter;

    // 次にダイアログ用を受け取ります。
    pcPrinter = GetPrinterInstance( DLG_PRINTER );
    // 出力します。
    pcPrinter->Output( "あいうえお\n" );
    // 解放します。
    delete pcPrinter;

    return 0;
}

『うん、これなら毎回作られるから大丈夫ね』
「 new と delete については Version 5.22 ( No.087 ) や
Version 11.12 ( No.212 ) を読み返してください」
『クラス使ってるから、 malloc() とかは使えないんだよね』
「そう、コンストラクタを呼び出してくれるのは new だけだから、ここで
は new を使う必要があります」
『うん。……でもさ、そんな難しくないじゃん。これでいいんじゃない？　
もう new と delete は習ってるんだし』
「そんな簡単な問題じゃないよ。まず重要なのは」

・いつ解放するか

「っていうこと」
『使ったら delete すればいいんじゃないの？』
「すぐ delete するならそれでもいいんだけど、でもたとえば今回みたいに
デバッグ用のクラスの場合、毎回作るよりはある程度使い回した方がいいで
しょ」
『確かにそうね……引数で渡したりメンバ変数で持ったりする方が楽そう』
「そうなるといつ delete で解放すればいいのか、そのタイミングが難しく
なります」
『確かに』
「さらに、同じポインタでいろんな変数を参照する場合、たとえばこの例の
pcPrinter 変数みたいな場合は、切り替え前に delete し忘れないようにし
ないと、切り替え前の変数が delete で解放できなくなります」
『それってメモリリークって言うんだっけ』
「 Version 11.09 ( No.209 ) で説明したね。こういった問題に加えて」

・何で解放するのか

「を間違える可能性もあるから」
『それはないでしょ、クラスなら delete 一択じゃん』
「そう？　たとえば GetPrinterInstance() 関数が、さっきみたいに 
static 変数のアドレスを返していたら？」
『げっ、そっか、ポインタだから delete すればいいって問題じゃないんだ』
「といった問題があるわけです」

/*
    Preview Next Story!
*/
『うーん、なんだか前に解決したと思った問題が……』
「というわけで次回も引き続き new と delete の話」
『げ、まだですか』
「当分この話が続くから」
『え〜？』
「というわけで次回」
＜ Version 17.22 delete の方法 ＞
『につづく！』
「ポインタ関係は避けられない問題だからね」
『避けられないの？　絶対？』
「うん、はっきり言ってずっと」
『えぇ〜！？』


////////////////////////////////////////////////////////////////////
/*                          ご注意！！                            */

・このメールを返信しないでください。
・ご意見・ご希望・ご感想は[チョー普通な日記]よりお送りください。
http://www.kab-studio.biz/nikki2/index.html
・購読登録を解除したいときにはこのページで行なってください。
http://www.mag2.com/m/0000012198.htm
・解除は自分で行なってください。
・バックナンバーはこれらのページにあります。
http://backno.mag2.com/reader/Back?id=0000012198
http://www.kab-studio.biz/Freeware/index.html#MailMagazine


////////////////////////////////////////////////////////////////////
/*
    KAB-studio.h
      Weekly Mail Magazine.
      Written by Kaburaya Seiden.
      http://www.kab-studio.biz/Info/MailMagazine/

    (C)KAB-studio 1999 - 2006 ALL RIGHTS RESERVED.
        http://www.kab-studio.biz/
        info@mail.kab-studio.biz
*/
////////////////////////////////////////////////////////////////////

