假设我的课程Quantity
包含不同的数据成员,包括value
和limits
:
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
必须位于限制之间。另一方面,我不能用一些随机有效的数字来初始化value
和limits
,因为它们的主体中包含检查条件的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
}
}
我不知道上面的定义是否是达到我想要的正确方式(如果它是优雅的话,不说话)。
那么如何定义默认构造函数,即如何初始化value
和limits
?