授業計画 |
| 回数 |
学習目標 |
学習項目 |
| 1 |
メモリ上のアドレスの概念を理解し、アドレス演算子が使える。
ポインタ変数の宣言と型を正しく扱い、nullptrを用いた安全な初期化が出来る。 |
メモリ上のアドレスの概念を復習し、アドレス演算子を用いたメモリアクセスの基礎を学習する。
ポインタ変数の宣言とnullptrによる安全な初期化の手法を実践する。メモリ操作の基本を学習する。
ポインタを用いた直接的なデータ操作の機序を学習する。低レイヤの視点を実践する。 |
| 【理解度確認】課題にて確認する。 |
| 2 |
配列名が先頭要素のアドレスであることを理解し、ポインタ演算による要素アクセスが出来る。
関数への引数としてポインタを渡し、呼び出し元の値を書き換える処理が作れる。 |
配列名とアドレスのポインタ演算を用いた配列要素へのアクセス手法を学習する。
関数への引数としてポインタを渡し、呼び出し元の変数を直接書き換える参照渡しを学習する。
ポインタを介した効率的なデータ伝達と、メモリ上の連続的なデータ操作を実践する。 |
| 【理解度確認】課題にて確認する。 |
| 3 |
newとdelete演算子を使いメモリ領域を確保と解放が出来る。
ヒープ領域の特性を理解し、配列の動的確保による柔軟なデータ管理が行える。 |
newとdelete演算子を用いた動的なメモリ領域の確保と、手動による解放の手順を学習する。
ヒープ領域の特性を学習する。実行時の要求に応じた柔軟なメモリ管理手法を実践する。
動的配列の活用により、データの規模変化に適応可能なプログラムの構築手法を学習する。 |
| 【理解度確認】課題にて確認する。 |
| 4 |
staticメンバ変数を用いて、全インスタンスで共有するデータの定義が出来る。
staticメンバ関数を使い、インスタンスを生成せずに呼び出せる機能が作れる。 |
staticメンバ変数を用いて、全インスタンス間で共有されるデータの定義と管理手法を学習する。
staticメンバ関数を実装し、インスタンスを生成せずにアクセス可能な機能の構築法を実践する。
クラス単位で共通化すべき情報と機能の切り分けを行い、効率的な資源利用を実践する。 |
| 【理解度確認】課題にて確認する。 |
| 5 |
IS-A関係を理解し、コードの再利用が出来る。
アクセス指定子「protected」を使い、派生クラスへのカプセル化が出来る。 |
クラスを拡張する継承(IS-A関係)の概念を学習する。
アクセス指定子「protected」を活用し、派生クラスに対して適切な情報の公開と秘匿方法を学習する。
継承によるクラス階層の構築を通じて、拡張性の高いシステム設計の基礎を学習する。 |
| 【理解度確認】課題にて確認する。 |
| 6 |
継承関係におけるコンストラクタとデストラクタの実行順序の説明が出来る。
基底クラスのコンストラクタへ初期化リストを用いた適切な初期化が出来る。 |
継承関係におけるコンストラクタとデストラクタの実行順序を学習する。
初期化リストを用いて基底クラスのコンストラクタを明示的に呼び出し、正しい初期設定を学習する。
派生クラスの生成プロセスを正確に把握し、不具合のないオブジェクト生成を実践する。 |
| 【理解度確認】課題にて確認する。 |
| 7 |
仮想関数を使ってクラスごとに異なる振る舞いの実装が出来る。
overrideを使い名前の打ち間違いによるバグを未然に防ぐことが出来る。 |
仮想関数を用いたオーバーライドにより、クラスごとに異なる振る舞いを実装する手法を学習する。
override指定子を活用し、シグネチャの不一致による意図しないバグを未然に防ぐ作法を実践する。
多態性の基礎となる動的結合の仕組みを学習する。 |
| 【理解度確認】課題にて確認する。 |
| 8 |
基底クラスのポインタで派生クラスのインスタンスを指すことが出来る。
仮想デストラクタを定義し、派生クラスのメモリ解放漏れを防止するコードが書ける。 |
基底クラスのポインタで派生クラスを操作するポリモーフィズムの具体的な運用方法を学習する。
仮想デストラクタを適切に定義し、派生クラスのメモリ解放漏れを防止する安全な設計を構築する。
型に依存しない抽象的な操作を実現し、プログラムの拡張性を飛躍的に高める手法を学習する。 |
| 【理解度確認】課題にて確認する。 |
| 9 |
純粋仮想関数を持つ抽象クラスを定義し、派生クラスでの実装が出来る。
インターフェースの概念を用いて、異なるクラス群に共通の操作仕様を与えることが出来る。 |
純粋仮想関数を持つ抽象クラスを定義し、派生クラスに対して具体的な実装を強制する手法を学習する。
インターフェースの概念を用い、異なるクラス群に共通の操作仕様(規約)を与える設計を構築する。
具体的な実装と抽象的な操作を分離し、部品化に適した高度なクラス設計を実践する。 |
| 【理解度確認】課題にて確認する。 |
| 10 |
ゲーム開発において時間の指標(デルタタイム)の管理が出来る。
std::chronoが使える。 |
なぜ「時」を制御する必要があるのかを学習する。
std::chronoの機能を学習する。
高精度タイマークラスを構築する。 |
| 【理解度確認】中間テストにて確認する。 |
| 11 |
std::vectorなどの動的配列コンテナを使い、要素の追加や削除を効率的に行える。
std::stringを用いた高度な文字列操作や、std::mapによるキー検索機能が使える。 |
標準ライブラリ(STL)の動的配列コンテナであるstd::vectorを用い、要素管理を効率化を学習する。
std::stringによる高度な文字列操作や、std::mapによる高速なキー検索の活用手法を実践する。
標準提供されるデータ構造を使いこなし、開発効率と実行性能を両立させる技術を学習する。 |
| 【理解度確認】課題にて確認する。 |
| 12 |
ファイルストリーム(ifstream/ofstream)を使い、テキストデータの読み書きが出来る。
設定ファイルからゲームのパラメータを読み込み、プログラムに反映させる処理が作れる。 |
ファイルストリーム(ifstream/ofstream)を用いて、テキストデータの読み書きを学習する。
外部の設定ファイルからパラメータを読み取り、プログラムに反映させるデータ主導の処理を構築する。
データの保存と復元のプロセスを通じ、外部リソースとの連携手法を実習にて実践する。 |
| 【理解度確認】課題にて確認する。 |
| 13 |
バイナリ形式でのデータ保存を理解し、シリアライズによる構造体のファイル出力が出来る。
ビッグエンディアンとリトルエンディアンの説明が出来る。
CSVファイルのパース処理を実装し、Excel等で編集したデータの活用が出来る。 |
バイナリ形式でのデータ保存とシリアライズを学び、構造体等のデータを効率的にファイル化することを学習する。
エンディアンの差異に関する基礎知識を学習する。
CSVファイルのパース処理を構築する。 |
| 【理解度確認】課題にて確認する。 |
| 14 |
論理演算(AND, OR, NOT, XOR)を使い、複数のフラグ情報を1つの変数での管理が出来る。
ビットマスクを用いた特定のフラグ判定や、フラグの反転・消去が出来る。 |
ビット単位の論理演算(AND, OR, NOT, XOR)を用い、複数のフラグ情報を変数一つで管理することを学習する。
ビットマスクを駆使して特定のフラグを判定・操作し、省メモリで高速な状態管理を実践する。
ゲーム開発で多用される「フラグ立て」や「判定」の処理を実践する。 |
| 【理解度確認】課題にて確認する。 |
| 15 |
ビットシフト演算による高速な乗除算や、データパッキングの仕組みの説明が出来る。
ARGBカラーコードの各成分をビット演算で取り出し、色情報の加工や変換が出来る。 |
ビットシフト演算による高速な計算手法と、情報のパッキングによるデータ圧縮の仕組みを学習する。
ARGBカラーコードの成分抽出を題材に、ビット演算を用いた具体的な色情報の加工を実践する。
1年次の全学習内容を再確認する。 |
| 【理解度確認】課題にて確認する。 |