PPPUC++#11.5
9.6 Operator overloading
9.7 Class interfaces
- 実装とIFの分離は重要
- じゃあ何故structが・・・って言おうと思ったら Mr.Sがセルフツッコミしてる・・・w
- それはいいけど、じゃあ良いIF設計ってどんなのですか?
- とかが基本方針
- 最初の二つは「可能な限り小さく、しかし小さすぎず」というやつ
- 小さい方がわかりやすいし覚えやすいしエラー探索もしやすいけど、小さければ良いってもんでもない
- 多数のpublicはカオスへの入口
- 関数もデータも。データの方がヒドい
9.7.1 Argument types
- 引数の型を使って引数の順序チェックをやってしまうという手口
- この例では Dateオブジェクトのコンストラクタで monthを間違えないようにMonth列挙型を使うとか
- これなら 4,5が 4月5日か5月4日か迷わなくてよいよねー
- あと、 Data.marでないのは Month列挙型がオブジェクトのものではなくクラスのものだから
- 名前空間とかクラスのスコープを明示するときは :: をつかう
- 理想的には全てのエラーがコンパイル時にわかるべき。実行時になんていくない
- 実行時のエラーはコードを人間が「探さ」なきゃだわだし、下手したらチェックコードを「書か」なきゃだわだし
- いやおいMr.S、、だからってあんた Yearクラスを・・・
- いやー
- というのはあんまり意味ないねーという話だった a sigh of relief....
- いやー
- 結局、Yearクラスの導入は引数の位置はチェックできても範囲エラーは実行時。あんまり意味ない
- 常にこういったバランスを考えるのが重要
- 「至高のメニュー」とか「究極のメニュー」いうな
- ヴォルテールの格言 "The best is the enemy of the good." まさに。
- ついでにstatic constの説明。クラス内で定数書く場合の常套。こうすると確保されるのが1つだけ、すなわちシングルトンであることが保証できる、とか。
class A { const int val; public: A(int a) : val(a) {} };
-
- とかできてしまうので、その区別が必要なのですね。
- immutableとかのほうが。やっぱ設計が(ry
- とかできてしまうので、その区別が必要なのですね。
9.7.2 Copying
- コピーコンストラクタとかコピー代入の話をするのかと思いきやそれは 14, 18章までおあずけ、とか。
- 言いたかったのはデフォルトではまるまるコピーだよって話だけらしい
- ここまでの例も結構無節操にコピーしまくり、と言う話は出てないw
- 参照返しやポインタ返しという無間地獄へようこそ・・・という話になってしまうからか
*1:D&Eにもしれっと「委員会で否決された」という話が書いてあるだけですが・・