pub date : Tue Dec 27

C++ を勉強した


C言語の使い方をある程度理解できたので、C++ に挑戦してみました。基本的な構文はほとんどC言語と変わりませんが、勉強を進めていくとC言語にはなかった変わった機能がありました。

クラス

C++に追加されたオブジェクト指向を実現する機能です。

用語

  • クラス : 状態(メンバ変数)と動き(メンバ関数)を保持するデータ構造
  • インスタンス : classを使って作成されたオブジェクト
  • カプセル化 : publicprivate を使って外部からアクセスを制限すること
  • 継承 : あるクラス(基底クラス)をベースに他のクラス(派生クラス)を作ること
  • ポリモーフィズム : 基底クラスと派生クラスにある共通する名前のメソッドの振る舞いをクラスごとに適切な処理に変えること
  • コンストラクタ : インスタンスを作成する際に呼び出されるメソッドで、メンバ変数の初期化に使われる

スマートポインタ

動的メモリを扱うとき、自動でメモリ管理をするポインタです。自動でメモリを解放するので、メモリリークを心配しなくても良さそうですね。さらに、構造が単純なのでオーバーヘッドがほとんどないようです。最高ですね。

用語

  • 所有権 : 「誰がメモリを解放するのか」という概念
  • shared_ptr : 複数の所有者を設定できるスマートポインタのことで、所有者がいなくなると自動でメモリを解放する
  • unique_ptr : 1人しか所有権を持つことができないポインタのことで、std::move を使うことで所有権を移動できる
  • weak_ptr : 参照カウントを増やすことなく、メモリを監視できるポインタ

感想

C言語よりも複雑で決して簡単ではありませんが、多機能なところがいいと思いました。クラス, スマートポインタ以外にも便利な機能はあるようです。C++ の基礎をある程度理解したら、ゲームプログラミングを勉強するつもりです。