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

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

    送信日： 2000/09/18(Mon) No.074
    配信数： 3850（ Mag2 + Pubzine ）
＊    発行元： まぐまぐ( URL: http://www.mag2.com/  ID: 0000012198 )
＊    発行元： Pubzine( URL: http://www.pubzine.com/  ID: 590 )
*/
{magclick}

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

・プログラミング辞書単語受付再開
　プログラミング辞書の単語受付を再開しました。皆さんガンガン送ってく
ださい！


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

2000/09/10 (Sun)
　ゼミ合宿前の準備、そしてテレビ色々。最近テレビ関係の話多いなー。

2000/09/11 (Mon)
　さらにゼミ合宿前の準備。そしてドラクエ。のんびりやってきましょー。

2000/09/12 (Tue)
　ゼミ合宿のためお休み。

2000/09/13 (Wed)
　ゼミ合宿のためお休み。

2000/09/14 (Thu)
　ゼミ合宿のためお休み。

2000/09/15 (Fri)
　ゼミ合宿から帰還！！　４日間のテーマは、旅館が出した驚異的なまでの
食事の数々！！　へとへとっすねー。あと、休み中のヒット数を観察すると
なかなか面白かったり。

2000/09/16 (Sat)
　友人Ｋの結婚式へ。うみょー幸せそうっす。そして友人Ｍ＆Ｉとボーリン
グ（爆）。うみょー楽しいっす。


/*                         鏑矢の憂鬱                             */
http://www.kab-studio.com/Programing/KabuU/

2000/09/10 (Sun)
お休み

2000/09/11 (Mon)
お便り
フック内でのアプリの判別ができない
IEXPLORE.EXE は起動しないっぽい
判別はクラス名でした方がいいかも
ウィンドウ名も使った方がいいかも
CString::operator=() は大文字小文字を区別する
CallNextHookEx() は呼び出すべきなのか
システムフックでは TRACE() は機能しない

2000/09/12 (Tue)
ゼミ合宿のためお休み。

2000/09/13 (Wed)
ゼミ合宿のためお休み。

2000/09/14 (Thu)
ゼミ合宿のためお休み。

2000/09/15 (Fri)
STL & iostream 入門について
再放送は本放送に引き続き配信される
再放送はバックナンバーが公開される
ホームページにもなるかも

2000/09/16 (Sat)
お便り
DLL の動的呼び出しとコンパイル設定
基本的に統一した方がいい
マルチスレッドでしていったほうがいいかも
DLL はデバッグが大変


/*             プログラミング辞書・今週の追加単語                 */
http://www.kab-studio.com/Programing/Dictionary/

・今週の状況：
　今週はゼミ合宿で単語受付を休止しました。なので追加単語はなし。
　あと、次の更新から「ごめんなさい」を廃止します。量がすごいことに
なってしまってるんで。「なんで〜？」という方は「鏑矢の憂鬱」にお送り
ください。


{magclick}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
『きゃー、ぷらとわに iostream がっ！！』
「これで STL & iostream 入門も役立つね」
『でもかなり昔配信されたのだよね。読んだことないって人もいそう』
「とういうあなたは再放送も読もう！」
　再放送を読みたいあなたは購読登録。
http://www.kab-studio.com/Programing/STLiostream/
_______________________________________________________________[KCM]
{magclick}


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

　Version 5.09
ファイルから読み取る！

「さて今回からはファイル編」
『うお、なんかすごーく難しそう！！』
「ま、これまでに比べればそれなりにはね。でも少しずつ見ていけば、そん
なに難しくないと思うよ」
『分かってる人はみんなそう言うのよッ！！』
「う”、まーそうかもしんないけど。さて、今回はファイルからデータを読
み取ってみましょう」
『はーい』
「まず、前回言ったけど〈何かの機能を使う〉場合には、色々なライブラリ
から色々な関数やクラスを探して、それを使うっていう方法になります」
『ってことは、ファイルから読み取る関数やクラスがどっかにあるんだ。も
しかしてランタイムにある？』
「うん、ランタイムにあるよ。それ以外にも API や MFC 、それに iostream
っていうのにも入ってるし」
『でたっ、別のメルマガでやってるのでしょ』
「そうそう。〈 STL & iostream 入門〉でもやってるけど、今回はこの
iostream を使って読み込んでみましょう」
『おお！　でもそんだけいっぱい方法があって、なんで iostream なの？』
「簡単だからね、使うだけなら。ただし、他のも次回以降に見ていくから」
『それって、水希ちゃんお得意の〈いろんなライブラリを使い比べてみよう〉
戦法でしょ』
「戦法……まあそういうこと。そうすることで選択肢が広がるし、プログラ
ミングのことがよく分かるようになると思うよ」
『そーゆーもんなんだ』
「さてまず、データファイルを用意しましょう」
『データファイル？　あ、読み取るためのファイルね』
「そう、今回は整数値を読み取って表示するから、整数値を書き込んだファ
イルを用意します。メニューの【ファイル】−【新規作成】選んで」
『いつもプロジェクト作るときに使うのだよね』
　【新規作成】ダイアログが表示される。【ファイル】ページが表示されて
いる。
『あ、いつもの MFC App なんとかとかがない』
「それは【プロジェクト】のページ。今回はその左の【ファイル】のページ
を見て」
『ヘッダーファイルとかソースファイルとか、これで作れるんだ』
「今回は【テキスト ファイル】を選んで」
『テキストファイルってよく聞くね』
「ただ文字が入ってるだけのファイルを〈テキストファイル〉っていいます。
拡張子が .txt のファイルがそう」
『フリーウェアの readme.txt とかもそう？』
「そう。その他に HTML ファイルもそうだし、プログラムが書かれてるソー
スファイルやヘッダーファイルもそう」
『あ、じゃあ今開いてる FileTestDlg.cpp なんかもそうなんだ』
「そういうこと。ちなみに〈ただ文字が入ってる〉ってどういうことだと思
う？」
『へ？　うーん……』
「バイナリー表示したらどうなってると思う？」
『あそっか、 A って文字だったら 0x41 って数字が入ってるんだ』
「そういうこと。テキストファイルにはそういう値が入ってて、テキストエ
ディタの方で〈 0x41 だから A を表示しよう〉っていうことをしてるわけ」
『なんか複雑よねー』
「まーね。ま、基本は〈ファイルの中に入ってるのは整数〉っていうイメー
ジを持つ方が大事かも」
『で、ファイル作らないといけないんでしょ？』
「そうそう。【テキスト ファイル】を選んで、【ファイル名】は Data.txt
にして」
『ベタベタねー。んで OK ？』
「そ。【位置】とかは、このファイルはプロジェクトの中に置くからそのま
までね」
『んじゃ OK ！』
　VC のウィンドウがまっさらになり、タイトルバーに [Data.txt] と表示
される。
『今作ったファイルがテキストエディタに表示されてるんだよね』
「そう、ここで読み取るための整数値を書き込みます」

100
200
300

「って入れて閉じて」
『保存して閉じるっと』
「なんだったらプロジェクトのあるフォルダ開いて、ファイルあるの確認し
た方がいいかも」
『うん、 Data.txt あるよ』
「テキストファイルはメモ帳でも見られるから」
『ホントだ、ちゃんと書き込まれてるね』
「そしたらこれを読み込みましょう。まず、これから使う iostream につい
て」
『おお、他でも解説してるのに。相変わらず親切丁寧ねー』
「そゆこと言わないで。 iostream は、標準 C++ ライブラリのなかのカテ
ゴリーのひとつ」
『標準 C++ ライブラリって、ランタイムのこと？』
「ランタイムは標準 C ライブラリ。これは C 言語時代、つまり古いライブ
ラリだから、 C++ ができたときにライブラリも新しくしよう、ってことに
なって」
『それで作られたのが標準 C++ ライブラリなんだ』
「そういうこと。で、 iostream はその中の〈入出力〉を専門にするクラス
のカテゴリー」
『ファイルと入出力するんだ』
「ファイルとは限らないけどね。ま、ファイルがメインかな。 io は in out
、つまり入出力のこと。 stream は、川の流れみたいなの」
『川？？』
「データをファイルに入出力するのがそういうイメージなのかも」
『そういえばインターネットライブとかのって〈ストリーミング〉って言う
もんね』
「それと同じ感じだね。それでは、実際に使ってみましょう。普通、あるラ
イブラリを使う時には、そのライブラリのヘッダーファイルをインクルード
します」
『インクルード？』
「前にちょっとやったけど忘れちゃったか。 FileTestDlg.cpp の上の方に
こういうのがあるでしょ」

#include "stdafx.h"
#include "FileTest.h"
#include "FileTestDlg.h"

『あ、なんかおぼろげに記憶が……』
「 Ver 2.12 ( No.023 ) でやったでしょ。あるクラスや関数を使いたい！
っていうときには」
『その宣言部が入ってるヘッダーをインクルードする！！』
「そう、 FileTestDlg.cpp の中で CFileTestDlg のメンバ関数を作れるの
は、 FileTestDlg.h をインクルードしているから。このヘッダーファイル
に CFileTestDlg の本体が入ってるからね」
『ってことは、 iostream のもこんなふうにインクルードすれば使えるよう
になるんだ』
「そういうこと。で、ホントはちょっと違うんだけど、今回は簡単にするた
めにここで iostream をインクルードしちゃおうか」
『ホントは別のとこでするの？』
「ホントはね。というわけで、今の３行に、こんな感じに１行を挿入して」

#include "stdafx.h"
#include <fstream>
#include "FileTest.h"
#include "FileTestDlg.h"

『上から２行目の <fstream> がそうだよね。あれ、なんでダブルクォーテー
ションじゃないの？』
「 "" で囲むと、プロジェクト内のファイルしかインクルードしてくれない
から。ライブラリはプロジェクトの外に置いてあって、そういうファイルを
インクルードするときには <> で囲みます」
『外って言うと、この前の API みたいに？』
「そういうこと。ここには書いてないけど、 API も <> で囲んでインクルー
ドしてるから」
『へー。あ、あと、なんで fstream って .h がついてないの？』
「標準 C++ ライブラリのヘッダーファイルは、全部拡張子がついてないん
だよね。ま、そうなってるってことで」
『なんで？』
「新しく作られたライブラリだから、これまでに作られた他のヘッダーファ
イルとファイル名が重ならないように、ってことでそうなったみたいだね」
『へ〜』
「さてこれで準備は完了。実際に iostream を使って読み込んでみます」
『いつも使ってる CFileTestDlg::OnBtnShow() に？』
「そう、今こうなってるでしょ」

void CFileTestDlg::OnBtnShow() 
{
    const int i = 100;
    char chDest[256]; 
    sprintf( chDest, "%d", i );
    m_cDataLstBox.AddString( chDest );
}

『前回こう書いたんだよね』
「それをこう書き換えて」

void CFileTestDlg::OnBtnShow() 
{
    int i;
    std::ifstream cIFStrm;
    cIFStrm.open( "Data.txt" );
    cIFStrm
        >> i;

    char chDest[256];
    sprintf( chDest, "%d", i );
    m_cDataLstBox.AddString( chDest );
}

『うお難しそう！　あ、でも最後の３行は同じなんだね』
「他もそんなに難しくないよ。１行目は分かるでしょ」
『変数 i を作ってるね。２行目の std:: って、もしかして名前空間？』
「そう、 Ver 4.01 ( No.051 ) でやったよね。標準 C++ ライブラリのクラ
スや関数は、全部この std っていう名前空間で囲まれてます」
『もしかして、これもさっきの .h 付けないってのと同じ理由？』
「同じ理由。同じ名前のクラスや関数がもう作られてても、名前空間に囲ま
れていれば別の名前ってことになるからね」
『なんかデリケートなのねー。で、 std::ifstream って？　ぱっと見型で、
cIFStrm って変数作ってるみたいだけど』
「その通り。 std::ifstream は iostream の中にある〈ファイルからデー
タを読み取る〉ためのクラス。ちゃんと MSDN にも載ってるよ」
『そのクラスの変数が cIFStrm なんだね。次のは open() ってメンバ関数
読んでるんだよね。 "Data.txt" ってことは、ここでファイル開いてる
の？』
「そう、このメンバ関数で Data.txt ってファイルを開いて、 cIFStrm を
使ってデータを読み取る準備をしてます。ちなみにこれちょっと省略してる
から」
『省略？』
「ホントは、 Data.txt があるかどうかのチェックする必要あるから。それ
は次回」
『でも今作ったんだからないはずはないと思うけど……』
「４行目の cIFStrm >> i; で、実際にデータをファイルから読み込んでま
す」
『はれ？　>> ってビットシフトする演算子でしょ。 Ver 4.05 ( No.055 ) 
でやったよ』 std::ifstream 
「実は、ここでは全然違う機能。 std::ifstream は >> 演算子を〈改造〉
してて」
『かっ、改造！？』
「 >> に〈ファイルからデータを読み取る〉っていう機能を着けたわけ。
そのおかげで、 cIFStrm >> i ってすると、ファイルから整数値が読み取ら
れて i の中に入れられるんです」
『な、なんかすごい……』
「仕組みは難しいから無視するとして、使い方はどう？」
『つまり、 std::ifstream の変数使って、 open() で目的のファイルを開
いて、 >> で右側に値を入れたい変数置けば勝手に入ってくれるってことだ
よね』
「そういうこと」
『あ、試してなかった。ビルドして実行。おお！！　ちゃんと 100 が表示
されてる！』

/*
    Preview Next Story!
*/
『使うだけなら簡単だけど、 STL（略）入門読むと理解は大変そう』
「ま、とりあえずは使えることが大事だからね」
『理解はあと？』
「ずっとあと。あと１回くらい、 iostream になれてみましょー」
『というわけで次回』
＜ Version 5.10 ifstream をもっと使う！ ＞
「につづく！」
『ずっとあとって、５年後とかじゃないでしょーね』
「はははははははは……………………」


/*                       金菜さんの憂鬱                           */
http://www.kab-studio.com/Programing/KanaU/

const メンバ関数
#06 const メンバ関数の基本構成

　const メンバ関数を採用しているクラスは、だいたい次の４つのメンバ関
数のような設計になります。

    int GetData() const
    {
        return m_i;
    }

　メンバ変数の値をただ返すメンバ関数は、 const メンバ関数にします。 
const メンバ関数は、呼び出すクラスが const かどうかに関わらず呼び出
せるから。そう考えると、メンバ関数は「デフォルトで const にしとく」
のが一番ってこと。メンバ変数を書き換えないならとりあえず const ね。

    void SetData( int p_i )
    {
        m_i = p_i;
    }

　メンバ変数に値をセットするメンバ関数は、当然非 const になります。
このメンバ関数は非 const クラス型変数からしか呼べないから、呼び出せ
る範囲は非常に狭くなります。

    const int &GetDataRef() const
    {
        return m_i;
    }

　メンバ変数への const 参照を返すメンバ関数です。実際には、メンバ変
数がクラスの場合に使用します。 GetData() とどっちかだけ使うことが多
いかな。ちょっと注意して欲しいのは、返しているのが const 参照ってこ
と。場合によっては非 const 参照を返したい場合があります。その場合に
は、非 const メンバ関数にします。

    int &GetDataRef()
    {
        return m_i;
    }

　これがそのメンバ変数への参照を返すメンバ関数です。 operator[]() 
など、メンバ変数を書き換えるときに使用します。非 const 参照を返す場
合、当然メンバ変数も非 const である必要があります。だから、メンバ関
数も非 const になってるわけ。重要なのは、この「非 const バージョン」
と「 const バージョン」は一緒に置けるってこと。つまり const のあるな
しでオーバーロードができるんです。 std::vector とかはこういうふうに
なってるから見てみてね。次回は const メンバ関数が呼べなくなる問題に
ついて。じゃね。


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

・プログラミング辞書「ごめんなさい」制度廃止
　プログラミング辞書では、これまで「追加できない単語」の場合には「ご
めんなさい」欄に理由を付けて掲載していましたが、送信数が膨大に増えた
ことにともなって「ごめんなさい」な単語が大幅に増えてしまったため、処
理しきれないくらいになってしまいました。
　なので、これからは「ごめんなさい」制度を廃止することにします。なの
で、追加されてなかったら「ダメだったんだな」と判断してください。
　追加されなかった理由が分からない場合などには鏑矢の憂鬱にてお送りく
ださい。

[プログラミング辞書]
http://www.kab-studio.com/Programing/Dictionary/

[鏑矢の憂鬱]
http://www.kab-studio.com/Programing/KabuU/


/*                          ご注意！！                            */

・このメールを返信しないでください。
・ご意見・ご希望・ご感想は[チョー普通な日記]よりお送りください。
http://www.kab-studio.com/nikki2/
・プログラミングに関する質問は[鏑矢の憂鬱]にお送りください。
http://www.kab-studio.com/Programing/KabuU/
・購読登録を解除したいときにはこのページで行なってください。
＊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://www.kab-studio.com/Freeware/

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

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


/*                      See you next week!!                      */


