TBD
関数の引数だけではわかりにくいと思ったらクラスにする。
ダメな例
bool flag = CompareWildCard("*IGHT", "eight", false);
良い例
WildCardCondition condition("*IGHT");
condition.SetCaseSensitive(false);
bool flag = condition.Accepts("eight");
クラスを作る時は、中身からではなくインターフェースを書いてから中身を書く
そのほうが、インターフェースが綺麗に書きやすい
継承されるクラスには仮想デストラクタを必ずつける。
これに関しては下記の記事がわかりやすい。
FAQ形式でデストラクタにvirtualを付ける理由をまとめてみた - かせいさんとこ
ここで書いてある通り、
すべてのクラスには、仮想デストラクタをつけるのがシンプルな気がする。
ちなみに、デストラクタの機能が不定になるのは、
子クラスのオブジェクトを親クラスにキャスト(アップキャスト)した時。
正直、そんなアクロバティックなコーディングしたこと無いので、
問題ないと思うが、仮想デストラクタを作っておくほうが良い
下記参照:
引数が一つのクラスのコンストラクタにはexplicitをつける。
あるクラス(hoge)で"引数(int)が一つ"のクラスがある時、
普通、
Hoge hoge(1);
というように、オブジェクトを作りますが、
実はC++の仕様で
Hoge hoge=1;
でオブジェクトを作ることができます。
しかし、下の方法を使うと挙動が不定になることがあるため、
上のオブジェクトの作成方法だけに限定する必要があります。
それには
class Hoge { public: explicit Hoge(int i){} };
のように,コンストラクタの前にexplicitを付けましょう。
最初から下の方法なんで使えないようにすればいいのに。。。(笑)