符合要求的时间类

定义一个描述生日的类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循环里面,否则容易出错。因为每次输入一个数据,程序接收一组数据,当输入第二组数据时,如果第一组数据没有输出,就会被第二组数据覆盖,输出的结果就是只有第二组数据。

猜你喜欢

转载自blog.csdn.net/pxl20171799/article/details/81225396