新・明解C++で学ぶオブジェクト指向プログラミング | ||||
|
第2章 具象クラスの作成
Date b = a;
*クラスオブジェクトが同じ型のクラスオブジェクトの値で初期化されるときは、全てのデータメンバの値がコピーされて同じ状態となる。
同じ値で初期化するコピーコンストラクタが暗黙に定義されている。
*クラスオブジェクトの状態(全データメンバの値)の透過性は、== や != では判定できない。
*コンストラクタの多重定義が可能。
*データメンバの値を変更しないクラスは、const で定義できる。
例外的に mutable 付きのメンバーは、値を変更できる。
*ヘッダは、インクルードガードして複数回出てくるのを回避する。
*static で宣言されたデータメンバは、そのクラス型の全オブジェクトで共有される静的データメンバとなる。
*time_t型は暦時刻。<ctime> ヘッダ。
*クラス型のデータメンバは、コンストラクタ本体の中で値を代入するのではなく、コンストラクタ初期化子によって初期化すべき。
Accounting::Accounting( const string& name, long amnt, int y, int m, int d) { full_name = name; crnt_asset = amnt; birth = Date(y, m, d); } Accounting::Accounting( const string& name, long amnt, int y, int m, int d): full_name(name), crnt_asset(amnt), birth(y, m, d) { }
(感想)
最後のコンストラクタ初期化子を使うべきというところが一番難しいでしょうか。後者だと、コンストラクタ本体には普通何を書くんでしょうかね?
インクルードガードって初めて見たとき何だこれ?と思ったんですが、複数ファイルにまたがる程度のコードを書いたときに、あ〜そういうことかと分かりましたね。
引数の内容や数でコンストラクタを使い分けるというのは、最初はとても分かりづらいし用途がぱっと浮かばないんですよね。