////////////////////////////////////////////////////////////////////
□□Ａ８ｎｅｔ□□アフィリエイト・プログラム=========

拝啓、サイト運営者さま、広告担当者さま

◎ネットの勝ち組がこぞってやってる成果報酬型広告！
◎ネット最新情報と広告の必勝法をお伝えいたします！
◎アフィリエイトセミナー開催中！
http://af1.mag2.com/m/af/0000008658/001/s00000001045006/028
=======================================================
////////////////////////////////////////////////////////////////////
/*

    KAB-studio.h


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

    送信日： 2006/08/28(Mon) No.371
    配信数： 1715
    発行元： まぐまぐ ( URL: http://www.mag2.com/  ID: 0000012198 )
*/
////////////////////////////////////////////////////////////////////

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

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

2006/08/28 (Mon)
　#pragma twice ホームページ版にアーカイブ追加！
16.18 単項演算子のオーバーロード
16.19 型変換演算子のオーバーロード
[ #pragma twice ]
http://www.kab-studio.biz/Programing/PragmaTwice/index.html

2006/08/28 (Mon)
　KAB-studio.hの縮刷版を更新！
[ ダウンロードルーム ]
http://www.kab-studio.biz/Freeware/index.html#MailMagazine


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

2006/08/20 (Sun)
　午前中は定例更新。午後は胃腸が……。勢い失いつつあるかも。夜に
プール。

2006/08/21 (Mon)
　昨日は夜２時半までほとはー外伝３描き。午前中は買い物。午後は高校野球
観戦。夕方にエリザベータ様描くもうまくいかず。方向性変わりつつある。
ストーリーへのこだわりが薄れてきてる？

2006/08/22 (Tue)
　休息日。あまかいで不具合発生。バグ修正後、JavaA2Zの全単語再取得機能
追加。さらにAmazonランキング保存用Webアプリにとっかかり。プールは行か
ず。

2006/08/23 (Wed)
　ちょお普通な日記に表示しているAmazon広告を変更。これは本当は小説や
ウェブコミック用。

2006/08/24 (Thu)
　目覚ましの力で８時半起き。横浜へ。コミックス買って、バッティングセン
ター行って、横浜ベイクォーター行って、成城石井行って。帰ってきてからは
ぐだー。無理矢理荻上さん描き。

2006/08/25 (Fri)
　朝起きるのが辛い。ほとんど死んでた。一応ほとはー外伝３のネームとか
ラクガキとか。夜にプール。

2006/08/26 (Sat)
　午前中は買い物。午後は何もしなかった。プール行くも体がすごく重い。
やっと６７キロ切れました。


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

2006/08/20 (Sun)
http://d.hatena.ne.jp/kab_studio/20060820
起きた……。
[KAB-studio]ぷらとわ追加。
[KAB-studio][ほとはー]ほとはー外伝３ P.68
[アニメ]「牙」 第21話「拭えぬ思い」
[アニメ]おねがいマイメロディ〜くるくるシャッフル！〜 
　第21話「バイオリンがきけたらイイナ！」
[アニメ]ひぐらしのなく頃に 第20話「目明し編　其ノ伍　冷たい手」
花火
[水泳ダイエット]8月6回目

2006/08/21 (Mon)
http://d.hatena.ne.jp/kab_studio/20060821
起きたのよー。
[絵][版権物イラスト]ふしぎ星の☆ふたご姫 Gyu! エリザベータ様
[アニメ]ARIA The NATURAL 第21話「その　銀河鉄道の夜に…」
[アニメ]ゼロの使い魔 第8話「タバサの秘密」
[アニメ]うたわれるもの 第20話「初陣」
[水泳ダイエット]8月7回目

2006/08/22 (Tue)
http://d.hatena.ne.jp/kab_studio/20060822
お、起き……。
[KAB-studio][あまかい][JavaA2Z]あまかいでAmazonトップ10が拾えてない
[水泳ダイエット]今日はお休み
[アニメ]N・H・Kにようこそ！ 第7話「モラトリアムにようこそ！」

2006/08/23 (Wed)
http://d.hatena.ne.jp/kab_studio/20060823
起きたー。
[KAB-studio]ちょお普通な日記の広告の内容を変更。
[水泳ダイエット]8月8回目
[アニメ]桜蘭高校ホスト部 第21話「いつかカボチャになる日まで」
[link][Prog]サーバやハブ、ルータなどの名前はどのように付けていますか？

2006/08/24 (Thu)
http://d.hatena.ne.jp/kab_studio/20060824
起きたー。
横浜ベイクォーター
横浜ベイクォーター２
というわけで帰ってきたっす。
[買]メロブとかで買ってきたもの。
[絵][版権物イラスト][link]「ビルコレさん、新色の
　ニンテンドーDS Lite欲しい！」な荻上さん
[絵][版権物イラスト][link]「Askビデオさん、動画デジカメ欲しい！」
　な荻上さん
[水泳ダイエット]今日はお休み
[アニメ]イノセント・ヴィーナス 第5話「連弾」
[アニメ]ゼーガペイン 第21話「戦士たち…」

2006/08/25 (Fri)
http://d.hatena.ne.jp/kab_studio/20060825
起きたー。
[絵]憂い
[買]ゼルダの伝説1
[買][アニメ]Kanon prelude
[アニメ]ザ・サード 〜蒼い瞳の少女〜 第17話「ローナ・ファウナ」
[アニメ]無敵看板娘 第15話「確かに奴は最強に見えた」
[アニメ]無敵看板娘 第16話「悪者がやってきた」
[水泳ダイエット]8月9回目

2006/08/26 (Sat)
http://d.hatena.ne.jp/kab_studio/20060826
起きたべー。
[アニメ]風人物語 第11話「オーディション顛末記」
[アニメ]おとぎ銃士 赤ずきん 第9話「魔法嫌いのハンス」
[アニメ]彩雲国物語 第17話「藪をつついて蛇を出す」
[アニメ]ふしぎ星の☆ふたご姫 Gyu! 
　第22話「もうすぐ新学期☆狙われたシフォン」
[アニメ]ウィッチブレイド 第20話「願」
[装備]サポートコインサービスで機種変更料金をキャッシュバック
[水泳ダイエット]8月10回目


////////////////////////////////////////////////////////////////////
// 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/s00000001045006/028
=======================================================
////////////////////////////////////////////////////////////////////
// #pragma twice
http://www.kab-studio.biz/Programing/PragmaTwice/index.html

　Version 17.16
純粋仮想関数と抽象クラス

「前回はポリモーフィズムの意味について説明しました」
『つまり、ポインタと仮想関数を組み合わせるとそのポインタが派生クラス
みたいに動く、ってことね』
「それがポリモーフィズム、多態性、様々な姿を見せるということです」
『んー、でもまだちょっと目的とか使いどころがわからないかも……』
「そういった所を見ていくため、特別な仮想関数、【純粋仮想関数】につい
て説明します」
『じゅんすいかそうかんすう？』
「そう。まぁでも〈純粋〉にはこだわらない方がいいかも。簡単に言うと
〈定義のない仮想関数〉のこと」
『定義のない……定義って、関数の本体のことだよね、 .cpp の方にある』
「そう」
『……そんなのあるわけないじゃん』
「それがあるんです。以下がその例」

// Data.h

// CData クラス。
// 純粋仮想関数を持つので「抽象クラス」です。
class CData
{
public:
    // 純粋仮想関数です。
    virtual void Output() = 0;
};

// CData クラスの派生クラス。
class CDerivedData : public CData
{
    // 定義します。
    void Output();
};


// Data.cpp
#include <Windows.h>
#include <stdio.h>

#include "Data.h"

// 基本クラスの Output() メンバ関数は、純粋仮想関数
// なので定義はありません。
/*
void CData::Output()
{
    OutputDebugString( "CData::Output()\n" );
}
*/

// 派生クラスの Output() メンバ関数。
// 定義しています。
void CDerivedData::Output()
{
    OutputDebugString( "CDerivedData::Output()\n" );
}

「これが純粋仮想関数の例です。純粋仮想関数を作る場合、仮想関数の宣言
の右に【 = 0】を付けます。つまり、以下のようにすることで純粋仮想関数
になります」

    virtual void Output() = 0;

「純粋仮想関数は、関数の定義がありません。つまり、以下の箇所は必要な
いということです」

/*
void CData::Output()
{
    OutputDebugString( "CData::Output()\n" );
}
*/

『……まじっすか』
「マジです」
『でもさでもさ、関数の中身がなかったら、呼び出しようがないじゃん。そ
んなクラス不良品じゃん、使えないじゃん』
「そのとおり。実は、純粋仮想関数を持つクラスは【抽象クラス】といって
変数を作ることができないんです」
『へ？』

    // 抽象クラスの変数を作ることはできません。
    CData cData;
    // コンパイルエラー：
    // error C2259: 'CData' : 
    //     抽象クラスあるいは構造体のオブジェクトが宣言されています。
    //     'CData' の宣言を確認してください。

「このように、純粋仮想関数を持つクラス、つまり抽象クラスは、変数を作
ることができないわけです」
『あーこれなら中身のないメンバ関数が呼ばれる心配はないわね、って！　
そんなクラスなんの意味もないじゃん！！　変数が作れないクラスになんの
意味があるっていうの！』
「実は意味があるんです。この純粋仮想関数は派生クラスで定義を作ること
ができます」
『定義を作れる？』
「オーバーライドすることで、中身のない純粋仮想関数に中身を作ることが
できるというわけです。さっき出てきたけど以下の部分がそう」

// CData クラスの派生クラス。
class CDerivedData : public CData
{
    // 定義します。
    void Output();
};


// 派生クラスの Output() メンバ関数。
// 定義しています。
void CDerivedData::Output()
{
    OutputDebugString( "CDerivedData::Output()\n" );
}

「オーバーライド、つまり純粋仮想関数と同じメンバ関数を派生クラスでも
作ることで、純粋仮想関数にはなかった定義を派生クラスで作ることができ
るというわけです」
『なるほど、オーバーライドすることで空欄を埋めるみたいになるわけね』
「そうすれば、〈実体のないメンバ関数が呼ばれる〉ことはなくなるので、
変数を作ることができます」

    // CDerivedData クラスの変数を作ります。
    CDerivedData cDerivedData;

『…………』
「…………」
『……で、それになんの意味があるの。 CDerivedData クラス直接作っちゃ
えばいいじゃん』
「うん、ここまでなら意味ないかな」
『ということは、意味のある使い方がある、と』
「そう。実はここでポリモーフィズムを使うことができるんです」
『ポリモーフィズム、ってことは基本クラスのポインタと仮想関数
……あ、なんとなくイメージ掴めた』
「というわけで、以下のように〈基本クラスのポインタ〉を通して使うこと
ができます」

// Main.cpp
#include <Windows.h>
#include <stdio.h>

#include "Data.h"

int WINAPI WinMain
    ( HINSTANCE p_hInstance
    , HINSTANCE p_hPrevInstance
    , LPSTR p_pchCmdLine
    , int p_iCmdShow
    )
{
    // CDerivedData クラスの変数を作ります。
    CDerivedData cDerivedData;

    // CData クラスのポインタを作ります。
    CData *pcData;
    // このポインタに cDerivedData 変数のアドレスを
    // 格納します（アップキャスト）。
    pcData = &cDerivedData;
    // このポインタを通して、 CDerivedData クラスで
    // 定義した Output() メンバ関数を呼び出します。
    pcData->Output();
    // CDerivedData::Output()

    return 0;
}

「まず、抽象クラスは〈変数を作る〉ことはできないけど、〈ポインタを作
る〉ことはできます」

    // CData クラスのポインタを作ります。
    CData *pcData;

「これはちょっと不思議に感じるかもね」
『んー、でも大丈夫。次の行でアップキャストしてるでしょ』

    // このポインタに cDerivedData 変数のアドレスを
    // 格納します（アップキャスト）。
    pcData = &cDerivedData;

『この時ってこうなってるんだよね』

CDerivedData: 0x00000001
┌───────┐       ┌───────┐
│ cDerivedData │       │ pcData       │
│ ┌────┐ │ ←←←│              │
│ │ cData  │ │       │ 0x00000001   │
│ │        │ │       └───────┘
│ │ __vfptr→→→→→
│ └────┘ │    ↓
└───────┘    ↓
                      ↓
       ←←←←←←←←
      ↓
      ↓
   vftable
  ┌──────────────────┐
 0│CDerivedData::Output()のアドレス    │
  └──────────────────┘

「そうそう」
『このイメージがあるから、ポインタなら作れる、っていうのわかるかも』
「そう、ポインタはそのクラスの変数そのものじゃないからね。で」

    // 定義した Output() メンバ関数を呼び出します。
    pcData->Output();
    // CDerivedData::Output()

「という形で仮想関数を呼び出せば仮想関数テーブル経由で呼び出されるか
ら」
『 CDerivedData クラスで定義した Output() メンバ関数が呼び出される』
「というわけ」

/*
    Preview Next Story!
*/
『変数が作れないクラスがあるなんて不思議』
「普通に考えると意味がないものね」
『でもちゃんと目的がある、と』
「というわけで次回」
＜ Version 17.17 関数ポインタの代わりとしてのポリモーフィズム ＞
『につづく！』
「次回は本当の目的に迫ります」
『んーどうかなー』


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

・このメールを返信しないでください。
・ご意見・ご希望・ご感想は[チョー普通な日記]よりお送りください。
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
*/
////////////////////////////////////////////////////////////////////

