////////////////////////////////////////////////////////////////////
----------------------------------------------------------------
一等米定期購入専門サイト「大江戸米蔵本舗」
今ならもれなくプレゼント【魚沼こしひかり】
http://af1.mag2.com/m/af/0000008658/001/s00000003624001/018
----------------------------------------------------------------
////////////////////////////////////////////////////////////////////
/*

    KAB-studio.h


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

    送信日： 2006/12/18(Mon) No.387
    配信数： 1676
    発行元： まぐまぐ ( URL: http://www.mag2.com/  ID: 0000012198 )
*/
////////////////////////////////////////////////////////////////////

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

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

2006/12/18 (Mon)
　#pragma twice ホームページ版にアーカイブ追加！
17.22 delete の方法
17.23 スマートポインタ
[ #pragma twice ]
http://www.kab-studio.biz/Programing/PragmaTwice/index.html


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

2006/12/10 (Sun)
　１２時半起き。KAB-studio.hの送信予約とほとはー外伝３描き、の途中。
明日からまったり行こう、おしごとぽしゃったし。

2006/12/11 (Mon)
　朝８時までゼルダ。昼１２時半から夜１０時半までゼルダ。まだ４分の３
しか終わってない。ボリューム多すぎ。

2006/12/12 (Tue)
　２時寝９時起き、あとはゼルダ。

2006/12/13 (Wed)
　朝６時までゼルダ、１１時に起きてゼルダ、午後５時半にやっとクリア。
こんな時間掛かるとは……。

2006/12/14 (Thu)
　１２時過ぎ起き。ほとはー外伝３ネーム切り。ぷらとわの広告を変更。
プール休み、でもダイエットモード。そしてアニメおすすめ。

2006/12/15 (Fri)
　１２時起き。ほとはー外伝３描き。ゼルダのリカバリーにがんばる。夜は
プール、でも疲れた。

2006/12/16 (Sat)
　１２時起き。ほとはー外伝３描き、あと１コマ。プールに行かない方が
ダイエットになるかも。今年を振り返る、１月。


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

2006/12/10 (Sun)
http://d.hatena.ne.jp/kab_studio/20061210
起きた。
[買]はじうぃ&ヌンチャク購入。
[KAB-studio]ぷらとわ追加。
[link]「R-TYPE I」ってそういえば。
[KAB-studio][ほとはー]ほとはー外伝３ P.83
[アニメ]「牙」 第37話「首都陥落」
[アニメ]おねがいマイメロディ〜くるくるシャッフル！〜 
　第37話「ダーリンって呼ばれたらイイナ！」
[アニメ]乙女はお姉さまに恋してる 第10話「二人のジュリエット」
[アニメ]くじびきアンバランス 第10話「さがしても、そこにはない。3点」
[アニメ]Gift 〜eternal rainbow〜 第10話「奪われた過去」

2006/12/11 (Mon)
http://d.hatena.ne.jp/kab_studio/20061211
起き。
[ゼルダトワプリ]2枚目取得。
[アニメ]金色のコルダ 第11話「白と黒のアダージョ」
[アニメ]夜明け前より瑠璃色な Crescent Love 第10話「片翼だけのお姫様」
[アニメ]ギャラクシーエンジェる〜ん 
　第11話「的中！名探偵の推理ファイる〜ん」

2006/12/12 (Tue)
http://d.hatena.ne.jp/kab_studio/20061212
起き！
[ゼルダトワプリ]（たぶん）ラストダンジョン前。
[アニメ]BLACK BLOOD BROTHERS 第11話「海」
[アニメ]N・H・Kにようこそ！ 第23話「岬にようこそ！」
[アニメ]Pumpkin Scissors 第11話「静かなる胎動」

2006/12/13 (Wed)
http://d.hatena.ne.jp/kab_studio/20061213
起きた。
[ゼルダトワプリ]や、やっとクリア……。
[買]コミックスとか。
[買]UZU-MAKI
[買]R-TYPE I（Wiiバーチャルコンソール）
[アニメ]DEATH NOTE 第11話「突入突入」
[アニメ]ブラックラグーン 第23話「Snow White's Payback」
[アニメ]ネギま！？ 
　第11話「へー、男爵ってバラの種類だったんだ。おイモかと思ってたよ」

2006/12/14 (Thu)
http://d.hatena.ne.jp/kab_studio/20061214
起きた。
[KAB-studio]#pragma twice微修正。
[アニメ]奏光のストレイン 第8話「グォール空間補給廠」
[アニメ]武装錬金 第11話「死が二人を別つまで」

2006/12/15 (Fri)
http://d.hatena.ne.jp/kab_studio/20061215
起きた。
[link]Adobe Photoshop CS3はWindows 2000に対応しない……？
[水泳ダイエット]12月3回目
[link][装備]WiiストラップとDSアダプターで不具合
[アニメ]あさっての方向。 第11話「そこにある現在（いま）」
[アニメ]すもももももも〜地上最強のヨメ〜 
　第11話「天誅戦士ウマ仮面、参上」

2006/12/16 (Sat)
http://d.hatena.ne.jp/kab_studio/20061216
起きた
[アニメ]彩雲国物語 第30話「女は度胸」
[アニメ]おとぎ銃士 赤ずきん 第25話「ちいさなお姫さま」
[アニメ]ふしぎ星の☆ふたご姫 Gyu! 
　第38話「頑張るノーチェ♪新しいメロディ」
[アニメ]コードギアス 反逆のルルーシュ 第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/s00000003624001/018
----------------------------------------------------------------
////////////////////////////////////////////////////////////////////
// #pragma twice
http://www.kab-studio.biz/Programing/PragmaTwice/index.html

　Version 17.31
継承のまとめ

「さて、今回で継承については終わりです」
『おお！　かなり複雑な話だったね……』
「だね、最初から振り返ってみようか」
『はーい』
「まず Version 17.01 ( No.356 ) で、継承の説明をしました」
『あるクラスにメンバ関数やメンバ変数を追加していく事ができる――って
いうより、クラスにクラスを被せる感じ？』
「そうだね、単純に考えれば、派生クラスは〈基本クラスのメンバを持ち、
それに新たなメンバを加えたクラス〉ってことになります。でも実際には」
『Version 17.03 ( No.358 ) みたいに基本クラスを派生クラスが包んでる
わけね』
「だからこそ、 protected っていう指定があるわけです。アクセス修飾子
は Version 17.04 ( No.359 ) でまとめているからちゃんと憶えてね」
『次は……代入関係だね』
「 Version 17.06 ( No.361 ) から説明しているように、代入には普通の
代入とポインタでの代入とがあって、まずこのふたつが全然違うものだって
ことを憶えておいて」
『普通の代入だと、コピーコンストラクタが呼び出されてメンバ変数が
コピーされるけど、ポインタの代入だとアドレスがコピーされるだけ、ね』
「だから、ポインタの代入では、アドレスが指している先の変数の型は変わ
らないわけです。それが Version 17.08 ( No.363 ) です」
『見た目の型と実際の型が違うっていうのが不思議よね。それが
ポリモーフィズムってことなんだよね』
「そういうことだね。ポリモーフィズム、つまり違う型のように動作するに
はオーバーライドが必要。それが Version 17.09 ( No.364 ) や、あと
Version 17.10 ( No.365 ) の仮想関数」
『結局、仮想関数にしないとオーバーライドは意味がないんだよね』
「そうなるね。だから実際には、継承する気があるならメンバ関数は全部
仮想関数にした方がいいかも」
『そうすれば必ずポリモーフィズムできるもんね』
「ただ……ここから本題だけど、 Version 17.12 ( No.367 ) で説明してい
るポリモーフィズムがちゃんと機能するためには、あくまで変数をポインタ
で扱っていないといけません」
『そうしないとアップキャストできないし仮想関数も意味ないもんね』
「そういうこと。で、実際の所、ポインタで処理をする場合、っていうのは
あまりないんです」
『そういわれるとそうだね……わざわざポインタを使う必要ってないような
気がする』
「だから、普段はポリモーフィズムを意識する必要はないってこと」
『……？？？　なんかそれって変くない？　使わなきゃいけないから教えた
んでしょ？』
「もちろん。 Version 17.16 ( No.371 ) や Version 17.17 ( No.372 ) で
説明したように、ポリモーフィズムの最大のメリットは、関数ポインタの
代わりとしての使い方です」
『そうそう、〈呼び出してもらう〉っていう場合に使うんだよね』
「だから、そういうプログラムを組む、っていう時にポリモーフィズムを使
う、継承・仮想関数・オーバーライドを使うって考えればいいかな」
『それが目的から考えた場合、ってことだよね』
「そう。今回の章では、目的よりもまずポリモーフィズムの機能から説明し
たからその辺がわかりにくかったかもね」
『うん、なんのために、っていうのが多かったかも』
「ただ、ポリモーフィズムは仕組みそのものがかなり複雑だから、まずはそ
こからっていうのが今回の方針。あと、 C++ 言語の一番難しい部分を見て
もらう、っていうのも目的」
『あー……』
「使う上でポインタが必要、で、 new について Version 17.21 ( No.376 ) 
で説明して、さらにスマートポインタについて Version 17.23 ( No.378 ) 
で説明しました」
『これが一番難しい所、ってことね。ここが理解できればいい、ってことで
いいのかな』
「そうなるけど……難しい理由のひとつは、見えないところで動いている
処理を知らなきゃいけない、っていう点かな」
『だよね。コピーコンストラクタや、戻り値で返される時に作られる変数と
か、なんかすごく複雑』
「しかも、そういう部分は本にはあまり書かれていない話だからね」
『なんで書いてないの？』
「難しいからっていうのもあるし、〈見えないところで動いている〉ってこ
とは、好意的に解釈すれば、〈便利に使える〉ためにそういう機能があるっ
てことだから」
『分からなくても動いていればいい？』
「ってことになるね。もちろん、スマートポインタみたいなものを作る時に
は知らなきゃいけないけどね」
『そのレベルまで行くかどうか、ってことね』
「あとは Version 17.29 ( No.384 ) 以降でコンストラクタやデストラクタ
関係の説明をしました」
『これで継承関係は終わり、ってことね』
「でも継承関係でまだ説明してない部分はあるんです」
『げ！　まだあるんだ……』
「結構ね。次章で、実践を交えてそのあたりを説明していこうと思います。
と、あと最後にちょっと考え方の話」
『ほい』
「まずは一番基本的な継承から」

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

// 基本クラス。
class CBase
{
public:
    // 仮想関数。
    virtual void Output1()
    {
        OutputDebugString( "CBase::Output1()\n" );
    }
};

// 派生クラス。
class CDerived : public CBase
{
public:
    // 仮想関数（オーバーライド）。
    virtual void Output1()
    {
        OutputDebugString( "CDerived::Output1()\n" );
    }

    // 上のとは別のメンバ関数。
    virtual void Output2()
    {
        OutputDebugString( "CDerived::Output2()\n" );
    }
};

int WINAPI WinMain
    ( HINSTANCE p_hInstance
    , HINSTANCE p_hPrevInstance
    , LPSTR p_pchCmdLine
    , int p_iCmdShow
    )
{
    // CDerived クラスの変数を作ります。
    CDerived cDerived;
    cDerived.Output1();
    // CDerived::Output1()
    cDerived.Output2();
    // CDerived::Output2()

    // アップキャストします。
    CBase *pcBase = &cDerived;
    // ポリモーフィズムします。
    pcBase->Output1();
    // CDerived::Output1()
    // pcBase->Output2(); ←こっちは呼べません。

    return 0;
}

「 CBase クラスと CDerived クラスがあります。 CDerived クラスは
CBase クラスから継承しているので、 CBase クラスが基本クラス、 
CDerived クラスが派生クラスになります。図にするとこうなります」

┌────────┐
│CBase           │
├────────┤
│                │
├────────┤
│Output1()       │
└────────┘
         △
         │
┌────────┐
│CDerived        │
├────────┤
│                │
├────────┤
│Output1()       │
│Output2()       │
└────────┘

「 Output1() メンバ関数はオーバーライドしています」
『だからアップキャストして呼び出すと、派生クラスの方が呼び出せるわけ
ね』

    // アップキャストします。
    CBase *pcBase = &cDerived;
    // ポリモーフィズムします。
    pcBase->Output1();

「そう、この pcBase ポインタは cDerived 変数を指しているっていうこ
と、仮想関数はオーバーライドした方が呼ばれるっていうことを忘れない
で」

┌ cDerived 変数────┐    ┌ pcBase ポインタ──┐
│   CDerived           │←←│ 0x00000001         │
│ ┌────────┐ │    └──────────┘
│ │CBase           │ │
│ │                │ │
│ │Output1()→     │ │
│ └─────↓──┘ │
│   Output1()←        │
│   Output2()          │
└───────────┘
アドレス：0x00000001

「このように、 pcBase ポインタを通して呼び出しているのは、 
cDerived 変数の Output1() メンバ関数。これは仮想関数で、オーバーライド
されているから、 CDerived クラスの方が呼び出されます」
『 CBase クラスのを呼び出しているように見えて、実は CDerived クラス
の方、これがポリモーフィズムってことね』
「さて、ここで重要なのは、このようにアップキャストした場合、実際の
クラスが CDerived クラスだとしても、その CDerived クラスの 
Output2() メンバ関数は呼べない、ってこと」

    // pcBase->Output2(); ←こっちは呼べません。

『そうなんだよね、どのメンバ関数が呼べるか、はこの左側の変数の型、
つまり pcBase ポインタの型で決まるんだよね。実際の型じゃなくて』
「これは、アップキャストをすることで〈 CDerived クラスのうち、 
CBase クラスのメンバだけ呼び出せるようにした〉ということなんです」
『？？？』
「 cDerived 変数は CDerived クラスだけど、アップキャストすることで
CBase クラスのメンバ関数・メンバ変数だけアクセスできるようになる、と
いうこと」

    // アップキャストします。
    CBase *pcBase = &cDerived; ← pcBase を通しては 
                                  Output2() メンバ関数は呼べない

『……できることを少なくしてる、ってこと？　でもなんで？』
「実はメリットがあるんです。こういった視点を持ちつつ最終章へ！」

/*
    Preview Next Story!
*/
『さ……最終章！？』
「というわけで次回」
＜ Version 18.01 ウィンドウプログラムをクラスで作る ＞
『につづく！』
「次回は応用編でーす」
『説明しろー！！』


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

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

