授業計画 |
| 回数 |
学習目標 |
学習項目 |
| 1 |
メモリ上のアドレスの概念を理解し、* & -> が使える。
配列名が先頭要素のアドレスであることを理解し、ポインタ演算による要素アクセスが出来る。 |
メモリ上のアドレスの概念を復習し、アドレス演算子を用いたメモリアクセスの基礎を学習する。
ポインタ変数の宣言とnullptrによる安全な初期化の手法を実践する。メモリ操作の基本を学習する。
ポインタを用いた直接的なデータ操作の機序を学習する。低レイヤの視点を実践する。 |
| 【理解度確認】課題にて確認する。 |
| 2 |
多次元配列のポインタが扱える。
ポインタ変数へのポインタ(多重ポインタ)が扱える。
構造体のポインタが扱え、パディングの説明が出来る。 |
配列名とアドレスのポインタ演算を用いた配列要素へのアクセス手法を学習する。
関数への引数としてポインタを渡し、呼び出し元の変数を直接書き換える参照渡しを学習する。
構造体のポインタを用いたメンバアクセス、パディングの仕組みを学習する。 |
| 【理解度確認】課題にて確認する。 |
| 3 |
関数へのポインタが扱える。
メンバ関数に隠し引数(thisポインタ)が渡される仕組みの説明が出来る。
スタックフレームの説明が出来る。 |
関数の実体をアドレスとして扱う関数ポインタの宣言方法と、コールバック処理への応用を学習する。
メンバ関数呼び出し時に暗黙的に渡されるthisポインタの仕組みを、関数ポインタの視点から学習する。
関数呼び出し時に積まれるスタックフレームの構造を学び、引数・戻り先・ローカル変数の関係を理解する。 |
| 【理解度確認】課題にて確認する。 |
| 4 |
newとdeleteを使ったメモリの動的確保が出来る。
Cのメモリ領域(スタックstack、スタティックstatic、プログラムprogram、ヒープheap)の説明が出来る。 |
newとdelete演算子を用いた動的なメモリ領域の確保と、手動による解放の手順を学習する。
ヒープ領域の特性を学習する。実行時の要求に応じた柔軟なメモリ管理手法を実践する。
動的配列の活用により、データの規模変化に適応可能なプログラムの構築手法を学習する。 |
| 【理解度確認】課題にて確認する。 |
| 5 |
staticメンバ変数(ユニークな存在)の説明が出来る。
staticメンバ関数(隠し引数thisの付与が無い=>関数の扱い)の説明が出来る。 |
staticメンバ変数を用いて、全インスタンス間で共有されるデータの定義と管理手法を学習する。
staticメンバ関数を実装し、インスタンスを生成せずにアクセス可能な機能の構築法を実践する。
クラス単位で共通化すべき情報と機能の切り分けを行い、効率的な資源利用を実践する。 |
| 【理解度確認】課題にて確認する。 |
| 6 |
IS-A関係を理解し、コードの再利用が出来る。
アクセス指定子「protected」を使い、派生クラスへのカプセル化が出来る。
継承の乱用が危険であることの説明が出来る。 |
クラスを拡張する継承(IS-A関係)の概念を学習する。
アクセス指定子「protected」を活用し、派生クラスに対して適切な情報の公開と秘匿方法を学習する。
継承だけで全ての個性を表現しようとするとクラス数が爆発的に増える問題(継承の乱用)を学習し、設計の限界を認識する。 |
| 【理解度確認】課題にて確認する。 |
| 7 |
継承関係におけるコンストラクタとデストラクタの実行順序の説明が出来る。
基底クラスのコンストラクタへ初期化リストを用いた適切な初期化が出来る。
仮想関数を使ってクラスごとに異なる振る舞いの実装が出来る。 |
継承関係におけるコンストラクタとデストラクタの実行順序を学習する。
初期化リストを用いて基底クラスのコンストラクタを明示的に呼び出し、正しい初期設定を学習する。
仮想関数を用いたオーバーライドにより、クラスごとに異なる振る舞いを実装する手法を学習する。 |
| 【理解度確認】課題にて確認する。 |
| 8 |
基底クラスのポインタで派生クラスのインスタンスを指すことが出来る。
仮想デストラクタを定義し、派生クラスのメモリ解放漏れを防止するコードが書ける。
純粋仮想関数を持つ抽象クラスを定義し、派生クラスでの実装が出来る。 |
基底クラスのポインタで派生クラスを操作するポリモーフィズムの具体的な運用方法を学習する。
仮想デストラクタを適切に定義し、派生クラスのメモリ解放漏れを防止する安全な設計を構築する。
型に依存しない抽象的な操作を実現し、プログラムの拡張性を飛躍的に高める手法を学習する。 |
| 【理解度確認】課題にて確認する。 |
| 9 |
std::vectorなどの動的配列コンテナを使い、要素の追加や削除を効率的に行える。
std::stringを用いた高度な文字列操作や、std::mapによるキー検索機能が使える。 |
標準ライブラリ(STL)の動的配列コンテナであるstd::vectorを用い、要素管理の効率化を学習する。
std::stringによる高度な文字列操作や、std::mapによる高速なキー検索の活用手法を実践する。
標準提供されるデータ構造を使いこなし、開発効率と実行性能を両立させる技術を学習する。 |
| 【理解度確認】課題にて確認する。 |
| 10 |
std::shared_ptrが使える。
std::weak_ptrが使える。
std::unique_ptrが使える。 |
所有権を唯一に限定するstd::unique_ptrの特性と、スコープ終了時の自動解放(RAII)の仕組みを学習する。
参照カウント方式で複数箇所から所有権を共有するstd::shared_ptrの仕組みと使用場面を学習する。
std::shared_ptr同士の循環参照を回避するstd::weak_ptrの役割と活用方法を学習する。 |
| 【理解度確認】課題にて確認する。 |
| 11 |
継承と仮想関数を用いて「ふるまい(処理)」を部品化する設計が出来る。
ポリモーフィックなコンテナを使った一括処理が書ける。 |
キャラクターの能力を「保持する振る舞い部品の組み合わせ」で表現する設計手法(Strategyパターン)を学習する。
抽象クラスとその派生クラスを用いて、個々の処理をカプセル化する方法を実践する。
std::vectorを用いて複数の振る舞いを保持し、一括して実行する仕組みを実装する。 |
| 【理解度確認】課題にて確認する。 |
| 12 |
ファイルストリームを使ったテキストデータの読み書きが出来る。
設定ファイルからゲームのパラメータを読み込み、プログラムに反映させる処理が作れる。 |
ファイルストリームを用いて、テキストデータの読み書きを学習する。
外部の設定ファイルからパラメータを読み取り、プログラムに反映させるデータ主導の処理を構築する。
データの保存と復元のプロセスを通じ、外部リソースとの連携手法を実習にて実践する。 |
| 【理解度確認】課題にて確認する。 |
| 13 |
バイナリ形式でのデータ保存を理解し、シリアライズによる構造体のファイル出力が出来る。
ビッグエンディアンとリトルエンディアンの説明が出来る。
CSVファイルのパース処理を実装し、Excel等で編集したデータをゲームで活用出来る。 |
バイナリ形式でのデータ保存とシリアライズを学び、構造体等のデータを効率的にファイル化することを学習する。
エンディアンの差異に関する基礎知識を学習する。
CSVファイルのパース処理を構築する。 |
| 【理解度確認】課題にて確認する。 |
| 14 |
論理演算(AND, OR, NOT, XOR)を使い、複数のフラグ情報を1つの変数での管理が出来る。
ビットマスクを用いた特定のフラグ判定や、フラグの反転・消去が出来る。 |
ビット単位の論理演算(AND, OR, NOT, XOR)を用い、複数のフラグ情報を変数一つで管理することを学習する。
ビットマスクを駆使して特定のフラグを判定・操作し、省メモリで高速な状態管理を実践する。
ゲーム開発で多用される「フラグ立て」や「判定」の処理を実践する。 |
| 【理解度確認】課題にて確認する。 |
| 15 |
ビットシフト演算による高速な乗除算や、データパッキングの仕組みの説明が出来る。
ARGBカラーコードの各成分をビット演算で取り出し、色情報の加工や変換が出来る。 |
ビットシフト演算による高速な計算手法と、情報のパッキングによるデータ圧縮の仕組みを学習する。
ARGBカラーコードの成分抽出を題材に、ビット演算を用いた具体的な色情報の加工を実践する。
1年次の全学習内容を再確認する。 |
| 【理解度確認】課題にて確認する。 |