オブジェクト指向プログラミングとSTL(Standard Template Library)を学ぶための中級者向けC++チュートリアルです。
このチュートリアルは全18レッスンで構成されています:
-
Lesson 11: クラスとオブジェクト基礎 ✅
- クラスの定義、メンバ変数・関数
- アクセス指定子(public, private, protected)
- カプセル化の概念
-
Lesson 12: コンストラクタとデストラクタ
- コンストラクタの種類(デフォルト、パラメータ付き)
- デストラクタの役割
- 初期化リスト
-
Lesson 13: 継承とポリモーフィズム
- 継承の基本
- virtual関数
- オーバーライド
-
Lesson 14: 名前空間と列挙型
- namespace の使用
- enum と enum class
- スコープの管理
-
Lesson 15: 演算子オーバーロード
- 算術演算子のオーバーロード
- 比較演算子のオーバーロード
- ストリーム演算子(<<, >>)
-
Lesson 16: vector と deque
- 動的配列の使用
- 両端キューの操作
-
Lesson 17: list と forward_list
- 双方向リスト
- 単方向リスト
-
Lesson 18: stack, queue, priority_queue
- スタック(LIFO)
- キュー(FIFO)
- 優先度付きキュー
-
Lesson 19: set と multiset
- 順序付き集合
- 重複を許可する集合
-
Lesson 20: map と multimap
- キーと値のペア
- 連想配列の使用
-
Lesson 21: unordered_set と unordered_map
- ハッシュテーブルベースのコンテナ
- パフォーマンスの違い
-
Lesson 22: STLアルゴリズム
- sort, find, count
- transform, accumulate
- その他の便利なアルゴリズム
-
Lesson 23: イテレータとラムダ式
- イテレータの種類
- ラムダ式の活用
- 関数オブジェクト
-
Lesson 24: 例外処理
- try-catch の使用
- 例外クラスの定義
- RAII パターン
-
Lesson 25: ファイル入出力
- fstream の使用
- テキスト・バイナリファイルの操作
- エラーハンドリング
-
Lesson 26: ヘッダとソースの分離
- .h と .cpp の使い分け
- インクルードガード
- プロジェクト構成のベストプラクティス
-
Lesson 27: 単体テストの書き方
- Google Test または Catch2 の導入
- CMake CTest の使用
- テスト駆動開発(TDD)の基礎
-
Lesson 28: ライブラリの作成
- 静的ライブラリ (.a)
- 動的ライブラリ (.so/.dll)
- CMake でのライブラリビルド
このチュートリアルを始める前に、以下の知識が必要です:
- 基本的なC++の文法(変数、制御構文、関数)
- ポインタと参照の基礎
- 配列と文字列の操作
C++ 基礎チュートリアルを先に完了することをお勧めします。
- C++11以上対応のコンパイラ
- GCC 4.8+
- Clang 3.3+
- MSVC 2015+
- CMake 3.10+
各レッスンは独立してビルドできます:
cd lesson11_classes
mkdir build
cd build
cmake ..
make
./classes_demo
./exercises-
学習の流れ
- 各レッスンのREADME.mdを読む
- デモプログラム(例:classes.cpp)を実行して理解を深める
- 演習問題(exercises.cpp)に取り組む
-
演習問題
- TODOコメントに従って実装
- 自分で実装した後、解答例(コメントアウト部分)を確認
-
復習
- 理解が不十分な部分は繰り返し学習
- 自分なりのプログラムを書いて応用力を養う
- C++ 基礎チュートリアル - レッスン1-10
- C++ リファレンス - 日本語C++リファレンス
- cppreference.com - 英語版リファレンス
このチュートリアルを完了したら、以下の学習を推奨します:
-
C++ 上級チュートリアル(予定)
- テンプレート、スマートポインタ、ムーブセマンティクス等
-
C++ エキスパートチュートリアル(予定)
- マルチスレッディング、SIMD命令、最適化技術等
このチュートリアルは教育目的で自由に使用できます。
改善の提案や誤りの報告は、GitHubのIssueでお願いします。
Happy Coding! 🚀