4-3- 基 C++ に関する知識 1
4-3- 基 C++ に関する知識 オープンソースシステムのソースを解読する上で C++ の知識は必須であるといえる 本カリキュラムでは まずオブジェクト指向に関する Ⅰ. 概要理解を深め クラスの扱い方について学習し STL を使用してアルゴリズムとデータ構造を実装する方法を学習する Ⅱ. 対象専門分野職種共通 Ⅲ. 受講対象者 本カリキュラムの 4-2- 基 C に関する知識 を受講済みであること ま受講前提たは 同等の知識を有すること オブジェクト指向の概念を理解する C++ の概要や C++ プログラミングの基本文法に関して理解する クラスの定義方法とカプセル化を理解する 関数のオーバーロードと演算子のオーバーロードを理解する Ⅳ. 学習目標 継承や抽象クラスとオーバーライドを理解し 多相性を理解する 例外処理 名前空間 C++ でのキャストを理解する C++ でのコンソール入出力やファイル入出力に関して理解する テンプレートや STL を利用したプログラムを理解する Ⅴ. 使用教科書 C++ 実践プログラミング 教材等 Steve Oualline 著 オライリー ジャパン刊 Ⅵ. 習得スキル講義終了後の受講レポート 定量アンケート 知識確認ミニテスト の評価方法演習問題の取り組み状況を総合的に判断して評価を行う Ⅶ. カリキュラムレベル 2( 基本 ) 第 1 回 ~ 第 15 回の構成 2
講座内容 第 1 回オブジェクト指向の概念 ( 講義 + ワークショップ 90 分 ) C++ プログラミングの前提となるオブジェクト指向の概念について学習し オブジェクトの根本的な考え方 と 各種の用語 型による抽象的なデータ操作などについて理解する (1) オブジェクトとは 1 オブジェクトとは ( 属性 操作 関係 アイデンティティ ) 2 クラス ( 内包クラス 外延クラス ) 3 インスタンス (2) オブジェクト指向 1 カプセル化 2 継承 3 多相性 第 2 回 C++ の基本 ( 講義 + ワークショップ 90 分 ) C++ プログラミングの概要として 歴史や特徴について学習する また C++ によるプログラムを開発する 流れについて習得する (1) C++ の説明 1 C++ の歴史 ( 歴史 開発の経緯 適用範囲 ) 2 C++ とオブジェクト指向 3 変数の宣言とスコープ 4 新しいデータ型 (bool 型 const 型 ) 5 参照 ( 関数への参照渡し 戻り値としての参照返し ) (2) C++ による開発の流れ 1 プログラム実行までの流れ (g++ によるコンパイル方法 ) 2 簡単な C++ プログラムの作成 (iostream cin cout など ) 3
第 3 回クラスの定義 ( 講義 + ワークショップ 90 分 ) C++ のクラスの基本的な定義方法と使用方法を学習することで オブジェクト指向プログラミングのカプセル 化技法を習得する (1) クラスの定義 1 クラスと構造体の違い 2 クラスの定義方法 ( メンバ変数 メンバ関数 スコープ解決演算子 ) 3 アクセス指定子とカプセル化 (private public protected) 4 サンプルプログラム (2) オブジェクトの生成と使用 1 オブジェクトの静的生成方法 2 メンバのアクセス方法 ( ドット演算子 アロー演算子 ) 3 オブジェクトの一括代入 4 オブジェクト配列 第 4 回クラスの詳細 ( 講義 + ワークショップ 90 分 ) コンストラクタやデストラクタ 静的メンバ変数や静的メンバ関数といったクラスの詳細な扱い方を理解する また C++ での動的生成やオブジェクトを引数や戻り値で使用したときの注意点を学習する (1) クラスの詳細 1 コンストラクタとデストラクタ (C++ の構造体と共用体 ) 2 this ポインタ 3 静的メンバ変数 ( 定義 初期化 const) 4 静的メンバ関数と const メンバ関数 5 クラスの包含 6 サンプルプログラム (2) 動的生成 1 動的生成 (new 演算子 delete 演算子 ) 2 ポインタによる包含 (3) オブジェクトと関数 1 オブジェクトの仮引数と戻り値 ( 値 ポインタ 参照 ) 2 サンプルプログラム 4
第 5 回関数のオーバーロード ( 講義 + ワークショップ 90 分 ) C++ プログラミングを特徴付ける関数の使用方法と 関数のオーバーロードについて理解し 柔軟なプロ グラミングを行う技能を習得する (1) C++ における関数の特徴 1 引数のない関数 2 デフォルト引数 3 インライン関数 (inline キーワード クラス定義 最適化オプション ) 4 サンプルプログラム (2) 関数のオーバーロード 1 関数のオーバーロードとは ( 引数の型 引数の数 引数の並び順 ) 2 デフォルト引数と関数のオーバーロード ( 曖昧さ回避 ) 3 コンストラクタのオーバーロード ( デフォルトコンストラクタ 初期化子 const メンバ変数 ) 4 コピーコンストラクタ ( デフォルトコピーコンストラクタ ポインタのメンバ変数の注意点 ) 第 6 回演算子のオーバーロード ( 講義 + ワークショップ 90 分 ) 演算子のオーバーロードについて理解する またフレンドについて学習し 演算子のオーバーロードにフレ ンド関数を使用することの利点を理解する (1) 演算子のオーバーロード 1 演算子のオーバーロードとは ( オーバーロード可能な演算子と不可能な演算子 ) 2 演算子のオーバーロードの定義方法 (operator) 3 代入演算子のオーバーロード ( デフォルト代入演算子 コピーコンストラクタとの関係 ) 4 代入演算子のオーバーロードの注意点 ( 自己代入回避 ) 5 二項演算子と単項演算子のオーバーロード 6 関係演算子のオーバーロード 7 添字演算子のオーバーロード 8 サンプルプログラム (2) フレンド 1 フレンドとは ( カプセル化の視点からみた注意点 ) 2 フレンドクラス 3 フレンド関数 ( 二項演算子のオーバーロード ) 4 サンプルプログラム 5
第 7 回継承と多相性 ( 講義 + ワークショップ 90 分 ) C++ における継承の概念と利用方法を理解する また オーバーライドの使用方法を習得し 仮想関数を利 用した多相性の実現方法を学習する (1) 継承 1 継承の定義方法 ( 派生クラス 基底クラス アクセス識別子 ) 2 オーバーライドとは ( オーバーライドの使用方法 基底クラスへのアクセス方法 ) 3 コンストラクタとデストラクタの実行順序 4 基底クラスの初期化 ( 初期化子 ) 5 間接基底クラス ( 派生クラスを継承 ) 6 サンプルプログラム (2) 仮想関数と多相性 1 仮想関数とは ( 基底クラスへのポインタ 仮想関数を使用したときとの違い ) 2 仮想関数の定義 (virtual キーワード ) 3 多相性 ( 多相性を実装していないときとの違い ) 4 仮想デストラクタ (virtual キーワード 仮想デストラクタを使用していないときとの違い ) 第 8 回抽象クラス 多重継承 ( 講義 + ワークショップ 90 分 ) 抽象クラスやインタフェースクラスの概念と利用方法を学習する また 多重継承と仮想基底クラスの扱 いについて理解する (1) 抽象クラス 1 純粋仮想関数とは ( 概念と条件 定義方法 派生クラスでの実装漏れ防止 ) 2 抽象クラスとは ( インスタンス化の禁止 派生クラスで共通の資産提供 ) 3 抽象クラスの利用方法 4 インタフェースクラス ( カプセル化の強化によるクラス間の疎結合 ) 5 インタフェースクラスの利用 6 サンプルプログラム (2) 多重継承 1 多重継承 ( 概念と定義方法 それぞれの基底クラスのアクセス方法 ) 2 コンストラクタとデストラクタの実行順序 3 仮想基底クラス ( 同一間接基底クラスによるメンバの曖昧さ回避 定義方法 virtual キーワード ) 4 サンプルプログラム 6
第 9 回テンプレート ( 講義 + ワークショップ 90 分 ) C++ におけるジェネリックプログラミングの実現手法として テンプレートの概念と利便性を理解し 関数テ ンプレートとクラステンプレートの扱いを学習する また string クラスの使用方法を習得する (1) テンプレート 1 ジェネリックプログラミングとは ( データ型に依存しない 再利用性の向上 ) 2 テンプレートとは ( コンパイル時の多相性 ) 3 テンプレートの定義 (typename キーワード class キーワード ) 4 関数テンプレート ( 引数と戻り値のテンプレート定義 テンプレート関数 ) 5 クラステンプレート ( メンバのテンプレート定義 テンプレートクラス ) 6 テンプレートの利用 ( プレースホルダ 型の曖昧さ 型の指定方法 ) 7 サンプルプログラム (2) string クラス 1 string クラス ( 標準ライブラリ basic_string クラステンプレート 利用方法 可変長の文字列 ) 2 サンプルプログラム 第 10 回キャスト 名前空間 ( 講義 + ワークショップ 90 分 ) 実行時型情報の取得方法や C++ で導入されて C にはないキャストの方法を学習する また名前空間の 目的と利用方法を理解する (1) 実行時型情報 1 実行時型情報とは ( 多相性と実行時型情報 typeid 演算子での定義 ) 2 実行時型情報の利用方法 ( 多相性での利用方法 テンプレートクラスでの利用方法 ) (2) キャスト 1 C++ での新しいキャスト ( 特徴 安全性の強化 ) 2 キャストの利用方法 (dynamic_cast const_cast static_cast reinterpret_cast) (3) 名前空間 1 名前空間とは ( 同名定義による衝突回避 スコープ アクセス制限をしない ) 2 名前空間の定義 (namespace グローバルスコープ 名前空間の入れ子) 3 名前空間の利用 ( スコープ解決演算子 using namespace) 4 無名名前空間 ( 静的グローバル変数 定義方法 利用方法 ) 7
第 11 回例外 変換関数 ( 講義 + ワークショップ 90 分 ) C++ における動的エラーの統一した処理として例外処理の概念を理解し 利用方法を習得する また 変 換関数の利用方法を学習する (1) 例外 1 例外とは ( 実行中のエラー 例外処理 ) 2 例外オブジェクト (exception クラス 例外クラス 例外クラスの継承 ) 3 例外監視 (try キーワードでの定義 try ブロック ) 4 例外捕捉 (catch キーワードでの定義 catch ブロック 例外捕捉方法 ) 5 例外投入 (throw キーワードでの定義 ) 6 例外の利用方法 ( 制御の流れ ) 7 サンプルプログラム (2) 変換関数 1 変換関数とは ( クラスの型からの暗黙的な変換 ) 2 変換関数の定義と利用方法 (operator での定義 ) 第 12 回入出力 ( 講義 + ワークショップ 90 分 ) C++ での入出力システムの扱いを理解する 更に 定義済みマニピュレータとマニピュレータの作成方法 また抽出演算子や挿入演算子のオーバーロードの方法を学習する (1) C++ における入出力システムの説明 1 コンソールとファイルの入出力管理 ( ストリーム cin cout 抽出演算子 挿入演算子) 2 抽出演算子のオーバーロード 3 挿入演算子のオーバーロード 4 マニピュレータ (endl ends flush dec hex setw など ) (2) ファイル入出力 1 ファイルストリームクラス (ifstream ofstream fstream) 2 ファイル入出力処理 ( 明示的な open is_open 明示的な close など ) 8
第 13 回演習 ( アルゴリズムとデータ構造の実装 )( ワークショップ 90 分 ) スタックを演習課題として アルゴリズムとデータ構造をオブジェクト指向にて実装する 更に テンプレー トを使用してリファクタリングを行い ジェネリックプログラミングを習得する (1) オブジェクト指向プログラミングの演習 1 スタックの概要 ( スタックポインタ プッシュ ポップ ) 2 スタックの抽象クラスを実装 (int 型のスタック 純粋仮想関数のプッシュとポップ 例外クラス ) 3 スタックの抽象クラスを継承 ( 動的配列にプッシュとポップを行うメンバの実装 ) 4 サンプルプログラム (2) ジェネリックプログラミングの演習 1 スタックをテンプレートで実装 ( スタックの抽象クラスと派生クラスをテンプレート化 ) 2 サンプルプログラム 第 14 回 STL の概要 ( 講義 + ワークショップ 90 分 ) コンテナとアルゴリズムのライブラリであり C++ 標準の機能である STL(Standard Template Library) の構 成や種類について学習する (1) STL の概要 1 STL とは ( 標準テンプレートライブラリ アルゴリズムとデータ構造の分離 ) 2 STL の要素 ( イテレータ コンテナ アルゴリズム 関数オブジェクト アダプタ ) (2) イテレータとコンテナ 1 イテレータの種類 ( 入力 出力 前方 双方向 ランダム ) 2 コンテナの種類 (typedef での型名 ベクトル リスト マップ など ) (3) ベクトル 1 ベクトルの説明 ( 動的配列 vector メンバ関数) 2 添字でのベクトルの利用 (size push_back 添字演算子 ランダムアクセス など) 4 ベクトルでイテレータの利用 (iterator begin end insert erase 代入演算子 など) (4) マップ 1 マップの説明 ( 連想配列 map メンバ関数) 2 マップの利用 (pair insert size 添字演算子 iterator begin end erase など) 9
第 15 回アルゴリズムとデータ構造の使用 ( 講義 + ワークショップ 90 分 ) STL の様々なアルゴリズムの利用方法を習得し STL を使用した安全で柔軟なアルゴリズムとデータ構造 の実装方法を学習する (1) アルゴリズム 1 アルゴリズムの種類 ( 検索 カウント イコール ループ コピー リバース など ) (2) リスト 1 リストの説明 ( 順次アクセス list メンバ関数) 2 リストの利用 (push_back push_front iterator sort merge など) 4 基本的なアルゴリズムの利用 (count find fill min_element max_element など) 6 ループアルゴリズムの利用 (for_each 単項関数オブジェクト unary_function など) 7 サンプルプログラム 以上 10