声明类的数据成员的范围

时间:2014-04-28 18:46:44

标签: c++ class constructor

我必须编写此课程类,其中包含roomday_of_week等元素。

必须在特定范围内声明每个课程才能使课程有效。

例如,day_of_week必须是1到6之间的整数,room必须是1到599之间的整数。

我的问题是,有没有办法编写我的构造函数,以便在初始化具有无效数据的对象时,它将无法编译。

从另一个角度来看,有没有办法在构造函数或类声明中声明我的数据成员的范围。

对不起,长时间阅读欢迎任何帮助。

1 个答案:

答案 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;
    }
};