コンストラクタにintメンバと不変型を持つ型を簡単に定義できますか?不変のクイックint型ですか? C++
...型としてint型として使用できますか?
Age a1 {32};
Age a2 {40};
cout << "Combined ages: " << a1 + a1;
Age a3 = a1 * 2;
// ...etc. etc.
(または、すべての演算子を上書きする唯一の方法です?)
おかげで、ジョン。
コンストラクタにintメンバと不変型を持つ型を簡単に定義できますか?不変のクイックint型ですか? C++
...型としてint型として使用できますか?
Age a1 {32};
Age a2 {40};
cout << "Combined ages: " << a1 + a1;
Age a3 = a1 * 2;
// ...etc. etc.
(または、すべての演算子を上書きする唯一の方法です?)
おかげで、ジョン。
数値を返すoperator int()
を追加すると、整数として使用できます。
Expects
はassert()
を綴らすることができ、その後、すべてのあなたの他の操作が動作できるようになる変換演算子を介して年齢を公開することができます:125として
class Age {
public:
Age(int a) : age_(a) {
assert(0 <= age_ && age_ <= 125);
}
operator int() const { return age_; }
private:
int age_;
};
余談制限年齢であります悲観的なビット。大きな夢!
質問をハイジャックしたくないのですが、 'assert()'を外部で無効にできないため、チェックがノーオペレーションになり、壊れたインバリアントが発生します。 – user2296177
@ user2296177これは機能です。 'assert'をオンにしてコードをテストしてから、実動ではチェックのコストを支払う必要はありません。 – Barry
ありがとう! 'Expects'(CPP Core Guidelines GSLライブラリから)を使用しても 'operator int()'に影響はありませんか? – ternonlerwen