重载《运算符
题目:重载运算符 << ,使之能够使用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;
}
来源:CSDN
作者:HTF流年
链接:https://blog.csdn.net/hua12ng/article/details/103746102