初期化と代入は違うとよく聞きますが、クラスだと違いがよくわかります。たとえば次のクラスをコンパイルするとエラーになります。
class SomeClass { private: const int value; public: SomeClass(int value); }; SomeClass::SomeClass(int value) { this->value = value; // ←注目 }
なぜかというと、メンバ変数の value が const となっており、コンストラクタでそれを初期化せずに代入しようとしているからです( const がつくと定数になるので初期化はできても代入はできません)。
コンストラクタでメンバ変数を初期化するためには次のように書きます。
SomeClass::SomeClass(int value) : value(value) { }
面白いですね。
なんでこんなことを書いているのかというと、「リードオンリーのメンバ変数を作りたいけどどうしたらいいのか」という初歩的なことで悩んでしまったので、自分を戒める意味で記録しておこうと思いました次第です。
ゲームは着々と設計が進んでおります。
Contributions