定义一个描述生日的类A:
包括两个数据成员(月、日,都是整型数据);
成员函数自由发挥(要重载输入运算符,只接受合法的月、日数据(月在1-12之间,日在1-31之间,2月默认28天)。接收到非法数据时,需要重新接收数据,直到接收到合法数据为止)。
要求:输入一组表示生日的数据(0,0表示结束),输出符合要求的生日对象。输出形式:xx月xx日(换行)。
输入
若干行,每行两个整数a和b(-50<=a,b<=50)。
输出
按上述要求输出。
样例输入
10 11
-12 33
0 0
样例输出
10月11日
#include<bits/stdc++.h>
using namespace std;
class Date
{
int month;
int day;
public:
Date(int m,int d);
Date();
int getMonth()
{
return month;
}
int getDay()
{
return day;
}
void display();
friend ostream&operator<<(ostream&os,const Date&d);
friend istream&operator>>(istream&is,Date&d);
};
Date::Date(int m,int d)
{
month=m;
day=d;
}
Date::Date()
{
month=0;
day=0;
}
void Date::display()
{
cout<<month<<"月"<<day<<"日"<<endl;
}
ostream&operator<<(ostream&os,const Date&d)
{
os<<d.month<<"月"<<d.day<<"日"<<endl;
return os;
}
istream&operator>>(istream&is,Date&d)
{
while(1)
{
is>>d.month>>d.day;
if(d.month==0&&d.day==0)
return is;
if(d.month==1||d.month==3||d.month==5||d.month==7||d.month==8||d.month==10||d.month==12)
if(d.day>=1&&d.day<=31)
return is;
if(d.month==4||d.month==6||d.month==9||d.month==11)
if(d.day>=1&&d.day<=30)
return is;
if(d.month==2)
if(d.day>=1&&d.day<=28)
return is;
}
}
int main()
{
Date d;
while(1)
{
cin>>d;
if(d.getMonth()==0&&d.getDay()==0)
break;
cout<<d;
}
}
注意事项:
1,重载输入时,为了让错误的数据不输出,要加一个while循环,当输入错误的数据时,数据从开始运行到最后一个if都不符合要求,所以需要重新输入数据,正好就是题目要求里面的只接收正确的数据。
2,要想一次输入多组数据,需要在主函数中加一个while循环语句,结束程序的语句要写在主函数里面。
3,cout<<d 要写在while循环里面,否则容易出错。因为每次输入一个数据,程序接收一组数据,当输入第二组数据时,如果第一组数据没有输出,就会被第二组数据覆盖,输出的结果就是只有第二组数据。