代码改变世界

运算符重载小程序(对Data类的++,<<,>>的重载)

2012-04-27 10:46  Lves Li  阅读(208)  评论(0编辑  收藏  举报
// Data.cpp : 定义控制台应用程序的入口点。
//运算符重载 自加运算符和输出输入运算符的重载   自加运算符在日期增加时可以判断平年还是闰年

#include "stdafx.h"
#include<iostream>
using namespace std;
class MyData //定义一个Data类有三个数据成员
{private :
	int year;
	int month;
	int day;


public :
	MyData (){year=0;
	month=0;
	day=0;}
	MyData(int y,int m,int d)
	{
	year=y;
	month=m;
	day=d;
	}
	friend ostream& operator <<(ostream &,MyData &);//重载输出流 声明为友原函数
	friend istream& operator >>(istream &,MyData &);//重载输入流 声明为友原函数
	MyData operator ++( );//前置自加运算符重载函数声明

};

ostream& operator<<(ostream & output,MyData & data)//定义重载输出(Data)类流函数
{

output <<"日期是:"<<data.year<<" 年"<<data.month<<"月"<<data.day<<"日"<<endl;
return output;
}

istream& operator >>(istream & input ,MyData & data)//定义重载输入(Data)类流函数
{
cout <<"请输入年月日:"<<endl;
cout <<"请输入年: "<<endl;
input >>data.year;
cout <<"请输入月: "<<endl;
input>>data.month;
cout <<"请输入日: "<<endl;
input>>data.day;
return input;
}


MyData MyData::operator ++( )//前置自加运算符重载函数定义
{
     
	if ((year%4)==0&&((year%100)!=0))
	
			{	if(month==2)
				 {
				  if ( ++day>29)
					{	
						day=day-29;
						month++;
					
					}
				 
				 }
				 else if (month==1||month==7||month==3||month==5||month==8||month==10||month==12)
				 {
				 if ( ++day>31)
					{	
						day=day-31;
						month++;
							  if (month>12)
									{
										++year;
										month=month-12;
									}
					
					}
				 
				 
				 }
				else	if ( ++day>30)
					{	
						day=day-30;
						month++;
						   
					}
	}
		else 
		{
					if(month==2)
					 {
					  if ( ++day>28)
						{	
							day=day-28;
							month++;
						
						}
					 
					 }
					 else if (month==1||month==7||month==3||month==5||month==8||month==10||month==12)
					 {
					 if ( ++day>31)
						{	
							day=day-31;
							month++;
								  if (month>12)
										{
											++year;
											month=month-12;
										}
						
						}
					 
					 
					 }
					else	if ( ++day>30)
						{	
							day=day-30;
							month++;
							   
						}
		}
	
		return *this;

}



int main()//主函数
{
	
MyData data1(2012,12,1);
//cin >>data1;
for (int i=0;i<2000;i++)
{++data1;
cout << data1<<endl;
}
return 0;
}