////////////////////////////////////////////////////////////////////
ITエンジニア社員募集 -採用者には５万円進呈-
Supported by effect : http://af1.mag2.com/m/af/0000008658/001/s00000003179001/008
////////////////////////////////////////////////////////////////////
/*

    KAB-studio.h


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

    送信日： 2006/07/24(Mon) No.367
    配信数： 1745
    発行元： まぐまぐ ( URL: http://www.mag2.com/  ID: 0000012198 )
*/
////////////////////////////////////////////////////////////////////

/*                         来週はお休み                           */

来週、７月３１日分の配信はお休みします。毎年恒例の夏休みです。
盆と正月に休むとちょうど年５０号になるので（爆）。
ホームページの方も７月３１日分の更新はお休みになります。
御了承ください。

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

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


2006/07/24 (Mon)
　#pragma twice ホームページ版にアーカイブ追加！
16.10 コンストラクタの復習
16.11 様々なコンストラクタ
[ #pragma twice ]
http://www.kab-studio.biz/Programing/PragmaTwice/index.html


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

2006/07/16 (Sun)
　寝過ぎ、でも起きられない。午前中は定期更新。午後はかぶヘッダーの準
備。ストックないし。ほとはー外伝３描き始めてまだできてない。今週ぐだ
ぐだの理由は？

2006/07/17 (Mon)
　SAA7130-TVPCI/Bのセットアップ。あとはぐだー。体力が回復しない。

2006/07/18 (Tue)
　午前中はSAA7130-TVPCI/Bとか洗濯とか。急遽明日おしごとすることに。
色々あって受けることに。今週はスケジュールきつい……。なのに
おとぎ銃士赤ずきんのお絵描きとか。夏コミはこの本出す予定。
プロジェクターの修理見積もりが１１万強。

2006/07/19 (Wed)
　超突発おしごと。テキスト本編３０ページを６時間半かけて解説。
新入社員じゃないと結構きつい……。帰ったらバタンキュー。

2006/07/20 (Thu)
　阿佐ヶ谷辺をぐるっと。

2006/07/21 (Fri)
　体が動かん……。午前中はビデオのダビング。午後過ぎにプロジェクター
が返ってくる。風雅、舞い書いてかぶヘッダーの準備して。来週はちょっと
楽。

2006/07/22 (Sat)
　午前中はアニメの感想書きとぷらとわ書き。午後はほとはー外伝３。夜に
フットサル。そのまま徹ゲー。んで次の日の朝７時帰宅。


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

2006/07/16 (Sun)
http://d.hatena.ne.jp/kab_studio/20060716
起きた。
[KAB-studio]ぷらとわ追加。
[KAB-studio][ほとはー]ほとはー外伝３ P.66
[アニメ]「牙」 第16話「悲劇の民」
[アニメ]おねがいマイメロディ〜くるくるシャッフル！〜 
　第16話「初恋が実ったらイイナ！」
[アニメ]ひぐらしのなく頃に 第15話「暇潰し編　其ノ弐　兆し」
[アニメ]コヨーテ ラグタイムショー 第2話「海賊亭の少女」
[アニメ]恋する天使アンジェリーク 第2話「初めての聖地で」

2006/07/17 (Mon)
http://d.hatena.ne.jp/kab_studio/20060717
起きたのですよー。
[装備]SAA7130-TVPCI/B 玄人志向 ファーストインプレッション
[アニメ]ARIA The NATURAL 第16話「その　ゴンドラとの別れは…」
[アニメ]ゼロの使い魔 第3話「微熱の誘惑」
[アニメ]うたわれるもの 第15話「宴の終わり」

2006/07/18 (Tue)
http://d.hatena.ne.jp/kab_studio/20060718
起きたので。
[装備]SAA7130-TVPCI/B 玄人志向 セカンドインプレッション
[装備]液晶プロジェクター修理代金
[絵][版権物イラスト]おとぎ銃士 赤ずきん
[アニメ]N・H・Kにようこそ！ 第2話「クリエイターにようこそ！」

2006/07/19 (Wed)
http://d.hatena.ne.jp/kab_studio/20060719
起きた。
帰ってきたー。
[アニメ]桜蘭高校ホスト部 第16話「ハルヒと光の初デート大作戦」
[きらら]まんがタイムきららMAX 2006年9月号

2006/07/20 (Thu)
http://d.hatena.ne.jp/kab_studio/20060720
起きた。
帰ってきた。
[link][アニメ]『AIR』Blu-ray Disc Box
[link]番組表の追加について
[アニメ]ゼーガペイン 第16話「復活の戦場」
[アニメ]ちょこッとSister 第2話「はじめてのお正月」

2006/07/21 (Fri)
http://d.hatena.ne.jp/kab_studio/20060721
起きた
[アニメ]機神咆吼デモンベイン 第8話「SHADOW IN THE DARK」
[アニメ]ザ・サード 〜蒼い瞳の少女〜 第12話「それぞれの理由」
[アニメ]無敵看板娘 第5話「かつてない強敵」
[アニメ]無敵看板娘 第6話「あの子の涙をぬぐいたい」
[アニメ]ハウルの動く城
[link]ニンテンドーDS Lite ノーブルピンク
[食][パスタソース]アラビアータソース
[装備]液晶プロジェクター帰還！

2006/07/22 (Sat)
http://d.hatena.ne.jp/kab_studio/20060722
起きたー。
[アニメ]風人物語 第6話「缶けり」
[アニメ]彩雲国物語 第16話「渡る世間に鬼はない」
[アニメ]おとぎ銃士 赤ずきん 第4話「グレーテルの罠」
[アニメ]ふしぎ星の☆ふたご姫 Gyu! 
　第17話「いよいよ夏休み！☆テストで大パニック？」
[アニメ]ウィッチブレイド 第15話「絆」


////////////////////////////////////////////////////////////////////
// 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

■追加・更新単語

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


////////////////////////////////////////////////////////////////////
ITエンジニア社員募集 -採用者には５万円進呈-
Supported by effect : http://af1.mag2.com/m/af/0000008658/001/s00000003179001/008
////////////////////////////////////////////////////////////////////
// #pragma twice
http://www.kab-studio.biz/Programing/PragmaTwice/index.html

　Version 17.12
ポリモーフィズム！

「前回は仮想関数テーブルについて説明しました」
『んー、仮想関数ってものがなんなのか、っていうのは分かったけど、その
メリットは？』
「それは今回説明する【ポリモーフィズム】っていうもののための機能なん
です」
『ぽりもおふぃずむ？』
「言葉の意味については置いといて、まずはどういうものなのか、実際に試
してみようか。ポリモーフィズムというのは〈今使っている型と違う型の
メンバ関数が呼び出される〉という機能のことを言います」
『……？？？　何それ、そんなことあるわけないじゃん』
「それがあるんです。実際に試してみようか。まずは、前回と同じように
仮想関数を持つクラスとそのメンバ関数をオーバーライドしたクラスを用意
します」

// Data.h

// CData クラス。
class CData
{
public:
    virtual void Output1();
    virtual void Output2();
};

// CData クラスの派生クラス。
class CDerivedData : public CData
{
    // オーバーライドします。
    void Output2();
};


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

#include "Data.h"

// 基本クラスの Output1() メンバ関数。
void CData::Output1()
{
    OutputDebugString( "CData::Output1()\n" );
}

// 基本クラスの Output2() メンバ関数。
void CData::Output2()
{
    OutputDebugString( "CData::Output2()\n" );
}

// 派生クラスの Output2() メンバ関数。
// オーバーライドしています。
void CDerivedData::Output2()
{
    OutputDebugString( "CDerivedData::Output2()\n" );
}

「ここまでは前回説明したのと同じ」
『 Output1() メンバ関数と Output2() メンバ関数が仮想関数で、そのうち
Output2() メンバ関数を CDerivedData クラスでオーバーライドしている、
と』
「仮想関数は仮想関数テーブルにポインタが保存されます。そのポインタは
オーバーライドした方が保存されます。図にするとこうなります」

┌───────┐
│ cDerivedData │
│ ┌────┐ │
│ │ cData  │ │
│ │        │ │
│ │ __vfptr→→→→→
│ └────┘ │    ↓
└───────┘    ↓
                      ↓
       ←←←←←←←←
      ↓
      ↓
   vftable
  ┌──────────────────┐
 0│CData::Output1()のアドレス          │
  ├──────────────────┤
 1│CDerivedData::Output2()のアドレス   │
  └──────────────────┘

「この図のイメージが重要になるのでよく憶えておいて」
『はーい』
「さて、重要なのは使い方です」
『そだね、クラスそのものは前回と全く同じだもんね』
「ポリモーフィズムを使う時には、使用方法が重要になるんです。では具体
例を紹介しましょう」

// 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 *pcData = &cDerivedData;
    // このポインタを通して仮想関数を呼び出します。
    pcData->Output2();
    // CDerivedData::Output2()

    return 0;
}

「まず、普通に派生クラスの変数を宣言します」

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

「次に、基本クラスのポインタへアップキャストします」

    // 基本クラスのポインタにキャストします。
    CData *pcData = &cDerivedData;

『アップキャストって Version 17.08 ( No.363 ) のだね』
「そう、基本クラスへのポインタに派生クラスのアドレスを代入することを
アップキャストと言います。図にするとこうなります」

CDerivedData: 0x00000001
┌───────┐       ┌───────┐
│ cDerivedData │       │ pcData       │
│ ┌────┐ │ ←←←│              │
│ │ cData  │ │       │ 0x00000001   │
│ │        │ │       └───────┘
│ │ __vfptr→→→→→
│ └────┘ │    ↓
└───────┘    ↓
                      ↓
       ←←←←←←←←
      ↓
      ↓
   vftable
  ┌──────────────────┐
 0│CData::Output1()のアドレス          │
  ├──────────────────┤
 1│CDerivedData::Output2()のアドレス   │
  └──────────────────┘

『アップキャストしても、ポインタが指してる先の型は変わらない、とかが
大事なんだよね』
「そう、そこがとても大事なんです。この状態で、 pcData を通して、
Output2() メンバ関数を呼び出してみます」

    pcData->Output2();

『んー pcData 変数は CData クラスのポインタだから普通に CData クラス
の Output2() メンバ関数が呼ばれる……』

    pcData->Output2();
    // CDerivedData::Output2()

『……え？』

    pcData->Output2();
    // CDerivedData::Output2()
       ^^^^^^^^^^^^

『ええええええっ！？』
「そう、つまり CDerivedData クラスでオーバーライドしている方の 
Output2() メンバ関数が呼び出されているんです」
『ってことは』

// 派生クラスの Output2() メンバ関数。
// オーバーライドしています。
void CDerivedData::Output2()
{
    OutputDebugString( "CDerivedData::Output2()\n" );
}

『が呼び出されてるってこと！？　だって、だってだって』

    CData クラスのポインタ
       ↓
    pcData->Output2();
    // CDerivedData::Output2()
       ^^^^^^^^^^^^

『だよね？　だよね！？』
「なんだけど、この場合派生クラスでオーバーライドした方が呼ばれるんで
す。なぜかというと」

・仮想関数を呼び出す場合、仮想関数テーブルに書かれているアドレスを
　通してメンバ関数を呼び出す

「というルールがあるんです」
『そ、そんなルールが……』
「というわけで次回に続く！」

/*
    Preview Next Story!
*/
『な、なんか変なルールが！！！』
「不思議？」
『不思議！』
「でしょう」
『って何その面白そうな顔は！』
「というわけで次回」
＜ Version 17.13 仮想関数とオーバーライド ＞
『につづく！』
「面白い？」
『面白くない！』
「えー？」
『何そのつまんなそうな顔は！』


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

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

