************************************************************************** よい子のC++目次 作成者:Mr. Ikken Katou ************************************************************************** 【前書き】 ------------------------------------------------- 【サンプル・プログラムについて】 ---------------------------- 1. C++とは -------------------------------------------------- 巷で色々言われているオブジェクト指向の正体を、ここで明らか にする。本屋には腐る程C++の本が並び、挙句の果てOOPな んて序の口、OODだOOAだと焚き付けてくる。著者の友人に は、これは陰謀じゃないかと言う者さえいる。プログラミングの テクニックを通り越して、プログラミング理論みたいなことが先 走り過ぎているのでないか。そのため、じゃ一体C++でオブジ ェクト指向プログラミングするって、どういうの。その肝心なと ころが見えて来ないのである。 1-1. 訳の分からない用語を切る ------------------------------- 1-2. C++の理解を妨げる要因 ------------------------------- 1-3. 参考文献等 --------------------------------------------- 1-4. C++とその関連用語 ----------------------------------- 1-5. コンパイル&リンクの方法 ------------------------------- 1-6. NIHクラス・ライブラリ ------------------------------- 2. C++の基礎 ------------------------------------------------ 普通C++を習得するには、1冊何か買えば済むというものでは ない。本を何冊も買い、雑誌もそれこそたくさん読まなければ、 なかなか理解できない。そこで、この章では順番に例題を追って いけば、一通りC++の機能を理解できるように構成したつもり である。ともかくこの章を早く習得して、便利なC++の恩恵を 授かろう。ちなみにC++のバ−ジョンは2.1です。このため テンプレ−ト機能(これも便利らしい)の例題はありません。 r1.C 入出力の簡単な例とデバッグの方法 ------------------- r2.C プログラミングのスタイル --------------------------- r3.C 関数のオ−バロ−ド --------------------------------- r4.C 関数の外部宣言 (r4s.C) ----------------------------- r5.C デフォルト引数の例 --------------------------------- r6.C クラス定義の用語 ----------------------------------- r7.C クラス定義の基本−その1 --------------------------- r8.C クラス定義の基本−その2 --------------------------- r9.C 参照型引数の例 ------------------------------------- r10.C 返り値の参照型の注意 ------------------------------- r11.C インスタンスの生成 --------------------------------- r12.C フレンド関数の例 ----------------------------------- r13.C 演算子のオ−バロ−ド:ただの関数を使う場合 ---------- r14.C 演算子のオ−バロ−ド:メンバ関数を使う場合 ---------- r15.C 演算子のオ−バロ−ドの注意:文字列操作の例 --------- r16.C 演算子のオ−バロ−ドの注意:ベクトル計算の例 ------- r17.C クラスの暗黙の定義 --------------------------------- r18.C 線形リストの定石−その1 --------------------------- r19.C 線形リストの定石−その2 --------------------------- r20.C 静的変数の例 -------------------------------------- r21.C ポインタ変数の復習 --------------------------------- r22.C メモリ領域の管理について --------------------------- r23.C 入出力ストリ−ムの使い方 --------------------------- r24.C その他の機能について -------------------------------- 3. クラス階層 ------------------------------------------------- クラスの設計は、階層構造をとることによって、クラスの関係を 分かり易くしたり、設計を容易にしたりする。また仮想関数を基 底クラスに定義することによって、クラスの抽象化を実現したり、 オブジェクトの管理を楽にしたりする。ともかくクラス階層を使 うと便利になることが多いので、C++の基礎を終了した人は、 ぜひクラス階層を使い始めて欲しい。 c1.C 派生クラスの例−その1 ------------------------------ c2.C 派生クラスの例−その2 ------------------------------ c3.C 派生クラスの例−その3 ------------------------------ c4.C クラスの初期化の注意 ------------------------------- c5.C コンストラクタの検討−Line( const Point a ) --------- c6.C コンストラクタの検討−Line( const Point& a ) -------- c7.C コンストラクタの検討−Line( Point* a ) -------------- c8.C コンストラクタの検討−継承クラスを含む -------------- c9.C 純粋仮想関数の注意 --------------------------------- c10.C 基底クラスの役割の注意 ----------------------------- c11.C 仮想関数:よくない基底クラス ----------------------- c12.C 仮想関数:基底クラスの余分な要素 ------------------- c13.C 仮想関数:仮想関数の機能を使う --------------------- c14.C クラス階層の設計−その1 --------------------------- c15.C クラス階層の設計−その2 --------------------------- c16.C クラス階層の設計−その3 --------------------------- c17.C 多重継承を使う−その1 ----------------------------- c18.C 多重継承を使う−その2 ----------------------------- c19.C 純粋仮想関数の実装クラスの注意 --------------------- 4. オブジェクト指向プログラミング ------------------------------ 著者なりに、どんなのが一体オブジェクト指向プログラミングな のか考えてみた。オブジェクトを管理するクラスを用意したり、 人工知能のフレ−ムを表わしてみたり、メッセ−ジ・パッシング らしいプログラムを作ったりした。しかし本当は、オブジェクト 指向プログラミングは、これだと言える例はないかも知れない。 なぜなら、クラス定義を含んだプログラムは、全てオブジェクト 指向プログラミングと言えるかも知れないからだ。 o1.C C++のいんちきオブジェクト−その1 ---------------- o2.C C++のいんちきオブジェクト−その2 ---------------- o3.C これはオブジェクト指向といえるのか? ---------------- o4.C 同種のオブジェクトをポインタで関連付ける ------------ o5.C 異種のオブジェクトをポインタで関連付ける ------------ o6.C オブジェクトを管理するデ−タ集合を用意する (o6s.C) -- o7.C オブジェクト指向におけるデ−タ構造の一形態 --------- o8.C デ−タ集合を個々のオブジェクト自身が持つ ----------- o9.C 関連付けられたオブジェクトの管理 ------------------- o10.C オブジェクトを知識ベ−スに利用する−その1 ---------- o11.C オブジェクトを知識ベ−スに利用する−その2 ---------- o12.C オブジェクトを知識ベ−スに利用する−その3 ---------- o13.C オブジェクトをフレ−ム・モデルに利用する ----------- o14.C メッセ−ジ通信とデ−タベ−ス−その1 ---------------- o15.C メッセ−ジ通信とデ−タベ−ス−その2 ---------------- o16.C オブジェクト保持の内部オブジェクトを取り出す -------- o17.C オブジェクト生成時の作成チェック ------------------- 5. C++の色々な機能 ------------------------------------------ この章は読み飛ばしてもらって結構である。必要になった時に見 るだけでよい。可変引数や割込処理についても載せたが、これら はC言語からの機能である。ただ何となく分かりにくい機能でも あるので、あえて例題を示した。C++の例題でコンテクスト・ スイッチ、静的なメンバ変数と関数などは、かなり機能としては トリッキ−である。また、バ−ジョン3.0でのテンプレ−ト機 能の代わりをするジェネリック型については、定義方法がかなり 繁雑なので取り上げなかった。バ−ジョン3.0が出るのを待っ た方が懸命だと思う。 t1.C コンテクスト・スイッチ ------------------------------ t2.C 仮想デストラクタ ------------------------------------ t3.C クラスの静的なメンバ変数と関数 --------------------- t4.C オブジェクトの属性値の設定方法 --------------------- t5.C オブジェクトのクラスの型変換 ----------------------- t6.C コンストメンバ関数と変数 --------------------------- t7.C インライン関数 ------------------------------------- t8.C 関数へのポインタ:そのまま使う場合 ------------------ t9.C 関数へのポインタ:クラスで使う場合 ------------------ t10.C 関数へのポインタ:その応用 ------------------------- t11.C Cのル−チンを呼び出す (t11.c) --------------------- t12.C クラスのフレンド宣言の基礎 ------------------------- t13.C クラスのフレンド宣言の応用 ------------------------- t14.C 関数の静的指定 (t14s.C) ---------------------------- t15.C 可変引数の表わし方 --------------------------------- t16.C 割込処理のやり方 ----------------------------------- 6. MotifのウィジットをC++で作成する -------------------- MotifウィジットをC++で、クラス化する方法を例示する。 クラス化するのは、親和性が良いと言うのか、以外に簡単にでき てしまう。ウィジットのコ−ルバックの扱いが、クラス化する際 のキ−ポイントである。これさえ分かれば、後は何てことはない。 リソ−スの設定は、たくさん有ってやっかいだが、クラスのメン バ関数で力ずくで対応させることになる。 m1.C プッシュボタン・ウィジットを作成する --------------- m2.C プッシュボタン・ウィジットをクラスにする ----------- m3.C ウィジットを複数作成する場合の記述の仕方 ----------- m4.C コ−ルバック関数に複数の引数を渡す方法 ------------- m5.C イベント制御のノウハウ(ちょっと長いけど見てネ)----- m6.C マウスとキ−入力制御のノウハウ ---------------------- 7. NIHクラス・ライブラリ ------------------------------------ EWSで利用可能なクラス・ライブラリとしてNIHを紹介する。 ただここに掲げる例題だけでは、実際に使うには役不足であるこ とを断わっておく。NIHを使うのは、意外にめんどうであると 言うのが著者の感想である。自作クラスをNIHに適用しようと すると、NIHの仮想関数をオ−バライドしなければならないの が、主な原因である。誰かNIHの日本語の本を書いてくれ−!。 n1.C Bag クラス ----------------------------------------- n2.C Set クラス ----------------------------------------- n3.C LinkedList クラス ---------------------------------- n4.C LinkedList クラス続き ------------------------------ n5.C Stack クラス --------------------------------------- n6.C ArrayOf クラス ------------------------------------- n7.C NIHクラス・ライブラリを使う−その1 ------------- n8.C NIHクラス・ライブラリを使う−その2 ------------- 8. アプリケ−ション作成のための指針 ---------------------------- 結局C++で、オブジェクト指向で、どうやってプログラミング するのか、その指針を示したい。C言語の構造化プログラミング に比して、C++のオブジェクト指向プログラミングを考えるな らば、C++ではクラスを用いてプログラミングすること。まさ にそれが、オブジェクト指向プログラミングである。この章で言 いたいことは、ただ1つこれだけである。 8-1. C++でのプログラミング (1) オブジェクト指向プログラミングって結局何なのか -------- (2) 勘どころ ---------------------------------------------- (3) プログラム作成の実践方法 ------------------------------ 8-2. C言語とのデ−タ構造の比較 (1) C言語の構造体の場合 ---------------------------------- (2) C++のオブジェクトの場合 ---------------------------- 8-3. オブジェクトの分類 (1) オブジェクトを"もの"として見る場合 -------------------- (2) オブジェクトを"知識"として見る場合 -------------------- 8-4. クラス階層について (1) クラスの分類 ----------------------------------------- (2) クラス階層の構成 -------------------------------------- (3) クラス階層作成の指針 ---------------------------------- 8-5. オブジェクトの管理 (1) オブジェクトの主体性を考える -------------------------- (3) オブジェクトのメッセ−ジ制御の種類 -------------------- 8-6. オブジェクトの保存について (1) オブジェクトをファイルにセ−ブする -------------------- (2) OODBの利用 ---------------------------------------- 8-7. GUI( Graphical User Interfase ) をどう使う (1) GUIの現状と問題点 ---------------------------------- (2) GUI構築ツ−ルの種類 --------------------------------