////////////////////////////////////////////////////////////////////
/*

    KAB-studio.h


    (C)KAB-studio 1999 - 2001 ALL RIGHTS RESERVED.
        http://www.kab-studio.com/
        info@kab-studio.com

    送信日： 2001/10/22(Mon) No.129
    配信数： 3760 ( Mag2 + Pubzine )
＊    発行元： まぐまぐ ( URL: http://www.mag2.com/  ID: 0000012198 )
＊    発行元： Pubzine ( URL: http://www.pubzine.com/  ID: 590 )
*/
////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////
/*              ２００１年１０月２２日（月）の更新                */
http://www.kab-studio.com/

・更新なし。
　情報技術者試験休み。っつーか大丈夫なのか……。


////////////////////////////////////////////////////////////////////
/*                        チョー普通な日記                        */
http://www.kab-studio.com/nikki2/

2001/10/14 (Sun)
　朝ぐたーっとして、午後はお仕事。こんくらいならなんとかなる？　テレ
ビはＮスペのイチローがいい感じ。本屋の表情、なぜか忘れられない……。

2001/10/15 (Mon)
　今日も残業。仕様の理解に頭がスポンジ状態。って最近はちょっとヤバ
い？　トマト煮おいしい〜。

2001/10/16 (Tue)
　仕事は昨日の続き、夕方客先、夜は新木場(爆)。なんだかサラリーマンっ
て感じ、なのはいいけどスケジュールがきつい。むー。

2001/10/17 (Wed)
　仕事は昨日の続き、ではなく新木場のを先に。既存のプログラムに合わせ
て書くのは結構大変。今日も残業だけど少し早く。 Java メルマガ第４号。
そしてラブひな最終回間近ぁ！？

2001/10/18 (Thu)
　お仕事は順調ながらも残業。残業に慣れつつあるし(泣)。っつーか自分の
ペースが分からないからうまくこなせてない？　久々の今日の一枚は１５分
の即席。久々の全体だし。

2001/10/19 (Fri)
　疲れが吹き出しつつも残業ナシ。横浜で電気敷毛布とかLET IT BE!! とか
購入。派遣先の面接を受けると派遣法に触れるそうです……しちゃった。今
日の一枚は謎なマンガ。普段もこういうの描かなかったり。

2001/10/20 (Sat)
　一日の３０％も勉強。資格は嫌いだけど、１５万のために。 DOA2 HC 購
入。 PS2 本体は明日。今クールのアニメはヴァンドレッド２とシュガー、
ココロ図書館かな。そして気付いた午前午後の意味。


////////////////////////////////////////////////////////////////////
/*                         風雅、舞い                             */
http://www.kab-studio.com/Novel/Fuga/

■　第二章　青年ふたり　−９−

　マンションを出ると、一行はてくてく歩き出した。舞も自転車を推してい
く。
　俊雄は、いつものように舞の横をではなく、雅樹の横に付いて歩く。舞は
その二人並ぶ後ろ姿を見ていた。
　俊雄は、できるだけ気づかれないように、雅樹を見ていた。自分の左側で
歩くその男は、まさにそびえ立つ、そういう感じだった。
　俊雄の父親は、自分と同じくらいの高さだから比較できない。俊雄の兄は
背は高いがスポーツをしてないから筋肉質じゃない。何度か経験した大学生
とのサッカーの試合でも、同じような雰囲気を持つ人はいないと感じた。監
督や、まれに会うことのできるプロの選手にも、感じた覚えはない。
　そこから導き出された答は「このプレッシャーは体格差だけじゃない」。
強靱な精神、確固とした自信、そして――もし存在するのなら――パート
ナーとの絶対の信頼。
　大人の、本当の、男。
　もし自分の予想が当たっているのなら、舞が雅樹に魅かれるのも無理はな
い、そう思えてしまう自分が悲しい、そう俊雄は感じた。
「ん？　なんだ？」
　雅樹は俊雄の方を見る。俊雄は思わず顔を背けて、何事もなかったかのよ
うに歩き続ける。そんな二人を、舞は後ろから見つめる。
　舞にとっても、雅樹との「出逢い」は男性観を大きく変えるものだった。
今まで夢物語だと思っていた存在。「男」という定義そのもののような感じ
を舞は受けていた。
　と感じはするが、考えれば、少し違うかなとも思う。「男そのもの」とい
うイメージはなんかアレな感じだと思うし、そういうのから来る攻撃的なイ
メージは雅樹からは連想されない。かといって、雅樹からは強い力を感じ
る。
　歩きながらふと、包容力、そういうような言葉がふと思いついた。
　雅樹には母性的な部分を感じることが度々あった。もちろん、外見はどう
やってもそうは見えないし、また、生活感のかけらも感じさせない。け
ど……。
　山奥の祠に隠りっぱなしの母親。その母親を見限った私達。それでも母と
の接点を持つ父。クールな目で見つめる兄と私。
　雅樹は、ドライなのにウェットな感じを抱かせる何かがあるように感じら
れた。それは、いつも見せている笑顔がそう感じさせるのか、見えなくても
存在感を抱かせる穂香のおかげなのか、それとも……。
　と、気づいたら雅樹のことを考えている自分を舞は恥ずかしく思う。だい
たい「護衛」っていってもあれから全然何もないし、だいたいお守りってあ
たしだって子供じゃないんだし。
　だいたい母さんがなんでこんなヤツを送ってきたのかが全然解らない。
「碧き泉」と「朱き泉」の接点、雅樹がいないあいだ誰が「朱き泉」を護っ
ているのか……ってあたしも人のことは言えないか。
　……ホント、なんか周りのことばっかり見ててあたし、何も解ってな
い……。
　舞は雅樹へとフォーカスを合わせた。自転車にまたがって、雅樹の隣へと
走る。
　聞くべきことを、訊くために。
　舞が横へと着けたとき、雅樹は立ち止まった。
「それどっかに止めてきた方がいいぞ」
「え？」
　一行は、駅へと着いていた。
                                                              (続く)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
『最近、辞書のヒット数すごいね』
「表紙を超えて１位、全体のヒット数も千は増やしてるしね」
『でも、別に何も更新してないのに……』
「たぶん試験のせい」
『あ、あの情報処理試験ってヤツ？』
「この号が出る前日にあるんだけど、その勉強に使われてるみたい」
『……だったら作者、必至こいて勉強する必要ないじゃん』
「そこが重要。辞書って、試験に全然役立たないと思うよ」
『げ、そなの？』
「辞書は実用性重視だし、一応情処試験向けの単語も載ってるんだけど」
『けど？』
「そういうのは実用であんまり使わないから、詳しく解説されてないし」
『よーするに作者も知らない、知らないから勉強しなきゃいけない』
「ま、結局それは、資格持ってても実用には使えないってことだけどね」
http://www.kab-studio.com/
_______________________________________________________________[KCM]


////////////////////////////////////////////////////////////////////
/*                       #pragma twice                            */
http://www.kab-studio.com/Programing/PragmaTwice/

　Version 7.09
演算子のオーバーロード

「えーっと、今日は難しいからちょっと気を抜いててもいいよ」
『なにぃ！？　なんか矛盾してるってそれ』
「コンストラクタもそうだけど、〈使う側〉の場合はそんなに厳密に理解し
てなくても使えるわけだから」
『っつーことは、使う段階になったら真面目に憶えなきゃいけないわけね』
「そゆこと。で、今回は前回の続き」

void CAnimeDlg::OnBDraw() 
{
    CRect cRect;
    ::GetWindowRect( GetSafeHwnd(), cRect );
    TRACE
        ( "%d, %d, %d, %d\n"
        , cRect.left, cRect.top
        , cRect.right, cRect.bottom );
}

『そうそう、ホントは &cRect じゃなきゃいけないはずなのに、 & が付い
てないのよねー』
「あ、ちなみに」

void CAnimeDlg::OnBDraw() 
{
    RECT stRect;
    ::GetWindowRect( GetSafeHwnd(), stRect );
    // error C2664: 'GetWindowRect' : 
    // 2 番目の引数を 'struct tagRECT' から 'struct tagRECT *' に
    // 変換できません。
}

『あ、ビルドでエラーになった』
「つまり RECT 構造体にはこの機能はありません。 CRect の機能だから」
『コンストラクタみたく、 CRect にそういう機能が付けられてるわけね』
「で、この仕組みを見る前に、もうひとつ、別の機能も見て」

void CAnimeDlg::OnBDraw() 
{
    CRect cRect1;
    ::GetWindowRect( GetSafeHwnd(), &cRect1 );
    CRect cRect2;
    ::GetWindowRect( GetSafeHwnd(), &cRect2 );
    if( cRect1 == cRect2 )
    {
        TRACE( "cRect1 == cRect2\n" );
    }
    // cRect1 == cRect2
}

『ん？　同じだよね、 cRect1 と cRect2 って』
「だから一致します」
『なるほど。で？』
「このコードのポイントは、 cRect1 == cRect2 。実は、クラスや構造体は
== で普通に比較できないんです」
『え、そうなの？』
「やってみようか。 RECT の場合」

void CAnimeDlg::OnBDraw() 
{
    RECT stRect1;
    ::GetWindowRect( GetSafeHwnd(), &stRect1 );
    RECT stRect2;
    ::GetWindowRect( GetSafeHwnd(), &stRect2 );
    if( stRect1 == stRect2 )
    {
        TRACE( "stRect1 == stRect2\n" );
    }
    // error C2678: 二項演算子 '==' : 型 'struct tagRECT' の左
    // オペランドを扱う演算子は定義されていません。
    // (または変換できません)
}

『ホントだ、エラーになった』
「構造体やクラスで比較をする場合には、メンバ変数ひとつずつ比較しなき
ゃダメ。 == だけじゃなく、 + とかの四則演算系とかもそう」
『面倒ねー。あ、だから CRect にはそういう機能がある！』
「そのとおり！　まずは MSDN の方を見てみようか」
『ほい、 CRect のメンバ関数一覧っと』
「下の方に〈演算子〉ってあるでしょ」
『ある。 operator LPCRECT とか operator == とか。これが？』
「そうこれが。まず、ここに書いてある【 operator 】は無視して読んで」
『無視すると、演算子がずらーり』
「その演算子は、このクラスに使えるって事」
『だから == を使えるってことね』
「演算子じゃないの、たとえば LPCRECT とかは、この型には自動的にキャ
ストできるってこと」
『あ！　これがあるから & 付けなくていいんだ。 LPCRECT って、 RECT の
ポインタだよね』
「そう、 const 版。 非 const なのは LPRECT の方」
『それもちゃんとあるね const が渡すの専用で、 const 付いてないのが受
け取り用、だって』
「 Ver 4.15 ( No.065 ) でやったね。 GetWindowRect() は」
『 LPRECT が引数になってるから LPRECT の方が呼ばれるんだね』
「ブレークポイント置いてステップインすれば確認できるから」
『え……ってことは、これってメンバ関数なの？』
「そう。 operator == のページを見てみて」
『ほい。ホントだ、引数が const RECT& で、戻り値が BOOL だ』
「ちなみに引数が RECT の参照だから」
『ってことは……』

void CAnimeDlg::OnBDraw() 
{
    CRect cRect1;
    ::GetWindowRect( GetSafeHwnd(), &cRect1 );
    RECT stRect2;
    ::GetWindowRect( GetSafeHwnd(), &stRect2 );
    if( cRect1 == stRect2 )
    {
        TRACE( "cRect1 == stRect2\n" );
    }
}

『うお通った！』
「ちなみに参照については Ver 4.14 ( No.064 ) の見てください」
『あれ？　じゃぁ……』

void CAnimeDlg::OnBDraw() 
{
    RECT stRect1;
    ::GetWindowRect( GetSafeHwnd(), &stRect1 );
    CRect cRect2;
    ::GetWindowRect( GetSafeHwnd(), &cRect2 );
    if( stRect1 == cRect2 )
    {
        TRACE( "stRect1 == cRect2\n" );
    }
    // error C2678:（以下略）
}

『げ、エラー！』
「そう、二項演算子って憶えてる？」
『 Ver 6.10 ( No.110 ) でやったね。演算子の左と右に変数取るのだね』
「そうそう。 cRect1 == cRect2 ってのも二項演算子だけど、この二項演算
子をメンバ関数として持つ場合、左オペランドのメンバ関数として呼ばれる
から」
『ってことは、 cRect1 のメンバ関数として呼ばれて……右オペランドの
cRect2 が引数として渡される！』
「そう！　上のでエラーが出ちゃうのは」
『 RECT には == のメンバ関数ないから』
「ってこと。このルールさえ憶えておけば、あとはメンバ関数と同じかな。
あ、ちなみに」

    if( cRect1.operator ==( stRect2 ) )

『な、なにこれ？』
「 cRect1 == cRect2 を、メンバ関数っぽく呼んだ例」
『ちゃんとコンパイル通る……』
「というわけで、メンバ関数になってる部分を見てみましょう」

（ Afxwin1.inl より抜粋）
_AFXWIN_INLINE BOOL CRect::operator==(const RECT& rect) const
    { return ::EqualRect(this, &rect); }
（抜粋ここまで）

『な、なんかよくわかんない……』
「うん、だから〈メンバ関数っぽい〉ってとこだけ解ってもらえればいいか
ら」
『あ、気を抜いていいんだもんね』
「そゆこと。とりあえずポイントは operator 。 == とかの演算子をクラス
のメンバ関数にする場合には、必ずこれを前に付けます」
『……それだけ聞くと簡単そうに聞こえる……』
「ま、上のコードは余分な情報が多いから解りにくいんだと思うよ。今回関
わってくる部分は operator だけだから」
『この部分はそれほど難しくないってことね』
「で、こういう〈演算子をクラスに使えるようにする機能〉のことを、
【演算子のオーバーロード】って言います」
『うわ、なんか難しそうな用語が！』
「ま、これは今はこのまんま憶えてもらっちゃってもいいや。
【オーバーロード】ってものについては今度別にちゃんと教えるから」
『げ、なんかまだ他に難しい事が？』
「だから難しいんだってば」
『難しかったり簡単だったり……』
「ちなみにこの演算子のオーバーロードは CString にもあったりします」
『うん、前にやったね。 operator LPCTSTR とか』
「 Ver 5.22 ( No.087 ) だね。でも、実際にはこの演算子のオーバーロー
ドがされてるクラスって多くないんだよね」
『そういえば、他の MFC クラスを見てもないね。便利じゃないのねー』
「でも、そうとも言えないんだよね」
『どゆこと？』
「たとえば operator LPCRECT 。これを使うと CRect をそのまま渡せ
ちゃうでしょ。ポインタとしてじゃなくて」
『うん、 & 付けないでね』
「こういうのってちょっと危なっかしいんだよね。もしポインタとかアドレ
スとかちゃんと知らないでこういうのを使っちゃうと」
『クラスだとそのまま渡せちゃう、とか思っちゃいそうだね』
「あと CString だと operator + () とかあるから、これで文字列をくっつ
けられるんだけど」
『これも普通の文字配列ならできないもんね、ポインタどーしだから』
「演算子のオーバーロードは、使ってるとこが〈目に見えない〉、つまりい
つの間にか使っちゃってることが多いんだよね」
『だからむやみにいろんなクラスに着いてたりはしないんだ』
「本来は初心者向けの機能なんだろうけど、むしろこれは、ちゃんと理解し
てる上級者向けの機能なのかもね」

/*
    Preview Next Story!
*/
『難しかったり難しくなかったり』
「うん、それは言えるかも。たとえば _AFXWIN_INLINE とか」
『知らないもの……だけど、全部大文字だから、マクロ？』
「そ。これは調べれば解ること。でも CRect::operator==() const の」
『 const って何……なんでこんなとこに付いてるの……』
「これなんかは調べるのも難しいもののひとつかも」
『というわけで次回』
＜ Version 7.10 いろんな描画モード ＞
「につづく！」
『で、この const はなんなの？』
「これはメンバ変数の書き換えを防ぐもので……続ける？」
『その調べるのも難しいことをすらっと言う水希ちゃんて……』


////////////////////////////////////////////////////////////////////
/*            ２００１年１０月２９日（月）の更新予定              */
http://www.kab-studio.com/

・KAB-studio.h 縮刷版更新。
　KAB-studio.h が 130 号になるんで縮刷版を更新します。その辺でお茶を
濁します（爆）。


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

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


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

    (C)KAB-studio 1999 - 2001 ALL RIGHTS RESERVED.
        http://www.kab-studio.com/
        info@kab-studio.com
*/
////////////////////////////////////////////////////////////////////
