包含值的类的默认构造函数及其作为数据成员的限制

时间:2017-10-06 06:56:23

标签: c++ constructor limit

假设我的课程Quantity包含不同的数据成员,包括valuelimits

class Quantity
{
    protected :
        double value;
        double lower_limit;
        double upper_limit;

    public :
        Quantity();//I need a default constructor
        Quantity( double value, double lower_limit, double upper_limit );
        //function members
        void SetValue( double value );
        void SetLimits( double lower_limit, double upper_limit );
};

当我尝试定义默认构造函数时出现问题:value必须位于限制之间。另一方面,我不能用一些随机有效的数字来初始化valuelimits,因为它们的主体中包含检查条件的set-functions。

为什么我需要默认构造函数。这是因为有另一个类(比如Event)包含Quantity个对象作为数据成员:

class Event
{
     protected:
         Quantity q1;
         Quantity q2;

     public:
         Event ();//Here it would be an error if I explicitly not initialized members without a default constructor
         ...
};

最终我想以下列方式使用它:

//Firstly, declare all objects
Event event;
Quantity q1;
Quantity q2;
//some code which e.g. calculates limits and values
q1.SetLimits(limit1, limit2);
q2.SetValue(value);
event.AddQuantity(q1);
event.AddQuantity(q2);

所以我以这种方式定义默认构造函数(其他构造函数类似):

Quantity::Quantity() : value(0.)
{
    lower_limit = std::numeric_limits<double>::lowest();
    upper_limit = std::numeric_limits<double>::max();
}

SetValue函数看起来像(SetLimits类似)时:

Quantity::SetValue( double value )
{
    if ( value between limits )
    {
        this->value = value;
    }
    else
    {
        //do something e.g. throw an exception
    }
}

我不知道上面的定义是否是达到我想要的正确方式(如果它是优雅的话,不说话)。 那么如何定义默认构造函数,即如何初始化valuelimits

0 个答案:

没有答案