Есть ли быстрый способ определить тип, который имеет член int и инвариант в конструкторе …
например
class Age {
public:
Age(int age) {
Expects(0 <= age && age <= 125);
age_ = age;
}
private:
int age_;
}
…а затем иметь тип, который можно использовать как int?
Age a1 {32};
Age a2 {40};
cout << "Combined ages: " << a1 + a1;
Age a3 = a1 * 2;
// ...etc. etc.
(Или это единственный способ переопределить все операторы?)
Спасибо, Джон.
Можете добавить operator int()
возвращая значение, и оно будет использоваться как целое число.
Expects
можно записать assert()
, и затем вы можете выставить возраст через оператора преобразования, который позволит работать всем вашим другим операциям:
class Age {
public:
Age(int a) : age_(a) {
assert(0 <= age_ && age_ <= 125);
}
operator int() const { return age_; }
private:
int age_;
};
Ограничивающий возраст возраст 125 лет немного пессимистичен. Большая мечта!