这次整理主要为枚举类型的遍历和"<<"以及">>"的重载。枚举类型的遍历的思想是重载++为”将a强行改为int类型,加一后再强行转化为枚举类型,然后用再循环遍历。<<、>>的重载要用到特殊的语法(见下文)。
enum WEEK{MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY};
class WEEKDAYS{
public:
WEEK a;
WEEKDAYS operator ++();
friend ostream & operator << (ostream &os,WEEKDAYS &w);//ostream:流,容易内存溢出
friend istream & operator >> (istream &is,WEEKDAYS &w);//cin、cout的重载,需要用到流和特殊语法
};
ostream & operator<<(ostream &os,WEEKDAYS &w){
if(w.a==MONDAY){
os<<"MONDAY";
}
if(w.a==TUESDAY){
os<<"TUESDAY";
}//此处省略以后部分
return os;
}
istream & operator>>(istream &is,WEEKDAYS &w){
string s;
is>>s;
if(s=="MONDAY"){
w.a=MONDAY;
}
if(s=="TUESDAY"){
w.a=TUESDAY;
}//此处省略以后部分
return is;
}
WEEKDAYS WEEKDAYS::operator++(){//重载“++”运算符,使其能够直接加类
a=(WEEK)((int)a+1);//强行把a改为int再改回WEEK
return *this;
}
int main(){
WEEKDAYS sample;
sample.a = MONDAY;
while(1){//遍历“WEEK”枚举
++sample;
cout<<sample;
if(sample.a == SUNDAY){
break;
}
}
return 0;
}