(C/C++)重载《运算符

为君一笑 提交于 2020-01-14 01:33:51

重载《运算符

题目:重载运算符 << ,使之能够使用cout将Date类对象的只以日期格式输出,Date类的定义如下,
在你的代码中需包含Date类的定义和实现。
class Date{
public:
Date(int y=1996,int m=1,int d=1){
day = d;
month = m;
year = y;
if (m>12 || m<1)
{
month=1;
}
if (d>days(y,m))
{
cout<<“Invalid day!”<<endl;
day=1;
}
};
int days(int y,int m);
void display(){
cout<<year<<"-"<<month<<"-"<<day<<endl;
}
private:
int year;
int month;
int day;
};

你需要实现运算符 << 的重载, 输出日期的格式参见display方法。
实现Date对象的days方法,该方法返回指定年月有多少天,如days(2001,1),返回31.

最终Date类的使用方式如下,在你的代码中除了完成Date函数还需包含以下main函数:

int main(){
int y,m,d;
cin>>y>>m>>d;
Date dt(y,m,d);
cout<<dt;
return 0;
}

例如,输入:
2013 2 1回车
输出:
2013-2-1回车

代码:

#include <iostream>
#include <cmath>
#include <string.h>

using namespace std;

class Date{
    friend ostream &operator<<(ostream &cout, Date &p);
public:
    Date(int y=1996,int m=1,int d=1){
        day = d;
        month = m;
        year = y;
        if (m>12 || m<1)
        {
            month=1;
        }
        if (d>days(y,m))
        {
            cout<<"Invalid day!"<<endl;
            day=1;
        }
    };
    int days(int y,int m);
    void display(){
        cout<<year<<"-"<<month<<"-"<<day<<endl;
    }
private:
    int year;
    int month;
    int day;
};

ostream &operator<<(ostream &cout, Date &p)
{
    cout<<p.year<<"-"<<p.month<<"-"<<p.day<<endl;
    return cout;
}

int Date::days(int y, int m)
{
    switch (month)
        {
        case 1: case 3:case 5: case 7: case 8: case 10: case 12:   return 31;
        case 2:
            if((year%4==0 && year%100!=0)||year%400==0)
            {
                return 29;
            }
            else
            {
                return 28;
            }
        case 4: case 6: case 9: case 11: return 30;
        default: break;
        }
}

int  main()
{
    int y,m,d;
     cin>>y>>m>>d;
     Date dt(y,m,d);
     cout<<dt;
     return 0;

}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!