今天写了一道c++primer plus上的题目,自认为有一个比较重要的知识点:状态成员。该成员可以控制对象输出的方向。本题中就可以控制对象转换为英石格式还是磅格式。状态成员是枚举类型。通过下面形式定义:
public:
enum Mode{yingshi,int_lbs,double_lbs};
之后使用的时候,只需要在你想控制的地方,进行判断
std::ostream & operator<<(std::ostream & os, const Stonewt & m )
{
if(m.mode==Stonewt::yingshi)
{
os << m.stone<<"英石"<<m.pounds<<"磅";
}
else if(m.mode==Stonewt::double_lbs)
{
os<<m.pounds<<"磅";
}
return os;
}
在其他成员函数中,加上一句
mode=Stonewt::double_lbs;
默认以磅形式输出,想要修改形式时,使用set函数
void Stonewt::setmode(Mode mo)
{
mode=mo;
}
进行修改即可。需要注意的是,状态成员在公有部分,访问的时候需要Stonewt::double_lbs,使用::符号,进行访问。