我必须编写此课程类,其中包含room
,day_of_week
等元素。
必须在特定范围内声明每个课程才能使课程有效。
例如,day_of_week
必须是1到6之间的整数,room
必须是1到599之间的整数。
我的问题是,有没有办法编写我的构造函数,以便在初始化具有无效数据的对象时,它将无法编译。
从另一个角度来看,有没有办法在构造函数或类声明中声明我的数据成员的范围。
对不起,长时间阅读欢迎任何帮助。
答案 0 :(得分:2)
不,C ++没有办法进行范围检查,但你可以实现自己的数字类,它会使赋值和算术运算符重载:
#include <cassert>
template<int lower, int upper>
class RangedNumber{
public:
RangedNumber(int value):value(value){
test();
}
RangedNumber(const RangedNumber& r):value(r.value){}
RangedNumber& operator+=(int i){
value += i;
test();
return *this;
}
RangedNumber operator+(int i) const{
RangedNumber r(*this);
return r += i;
}
RangedNumber& operator-=(int i){
value -= i;
test();
return *this;
}
RangedNumber operator-(int i) const{
RangedNumber r(*this);
return r -= i;
}
int get() const {
return value;
}
private:
int value;
void test(){
if(value < lower || value >= upper)
throw std::out_of_range;
}
};