2016-09-11 9 views
1

コンストラクタにintメンバと不変型を持つ型を簡単に定義できますか?不変のクイックint型ですか? C++

...型としてint型として使用できますか?

Age a1 {32}; 
Age a2 {40}; 
cout << "Combined ages: " << a1 + a1; 
Age a3 = a1 * 2; 
// ...etc. etc. 

(または、すべての演算子を上書きする唯一の方法です?)

おかげで、ジョン。

答えて

3

数値を返すoperator int()を追加すると、整数として使用できます。

1

Expectsassert()を綴らすることができ、その後、すべてのあなたの他の操作が動作できるようになる変換演算子を介して年齢を公開することができます:125として

class Age { 
public: 
    Age(int a) : age_(a) { 
     assert(0 <= age_ && age_ <= 125); 
    } 

    operator int() const { return age_; } 

private: 
    int age_; 
}; 

余談制限年齢であります悲観的なビット。大きな夢!

+0

質問をハイジャックしたくないのですが、 'assert()'を外部で無効にできないため、チェックがノーオペレーションになり、壊れたインバリアントが発生します。 – user2296177

+0

@ user2296177これは機能です。 'assert'をオンにしてコードをテストしてから、実動ではチェックのコストを支払う必要はありません。 – Barry

+0

ありがとう! 'Expects'(CPP Core Guidelines GSLライブラリから)を使用しても 'operator int()'に影響はありませんか? – ternonlerwen

関連する問題