天天看點

時間類--運算符重載函數--gyy

/*
定義一個時間類Time,其成員如下:
有3個私有資料成員hour、min、sec,分别表示時間類中的時、分、秒
公有成員函數聲明如下,函數體自己填寫:
Time(int h, int m, int s);//帶3個參數值的構造函數,注意時間是有規則的,注意在傳遞參數時如果遇到非法時間,則将hour、min、sec值都設為0 或要求重新輸入
~Time();//析構函數
void  setTime(int h,int m,int s); //重新設定時間
void  showTime(); //顯示時間
void  timeAdd(int h, int m ,int s);//進行時間相加,參數為時、分、秒
void  timeAdd(int s); //進行時間相加,參數為秒

利用運算符重載函數作為友元函數來完成相應類對象的操作
friend Time operator+(Time t1,Time t2);   
friend Time operator+(Time t1,int s);

friend bool operator>(Time t1,Time t2);
friend bool operator<(Time t1,Time t2);  
friend bool operator==(Time t1,Time t2); 
friend bool operator!=(Time t1,Time t2); 

friend ostream & operator<<(ostream & output,Time & t);
friend istream & operator>>(istream & input,Time & t);

利用運算符重載函數作為成員函數來完成相應類對象的操作
Time operator++();  
Time operator++(int);

在主函數中建立Time對象,通過對象調用成員函數來完成相應操作。
*/
#include <iostream.h>

class Time
{
  public:
   Time(int h=0, int m=0, int s=0); //帶3個參數值的構造函數,注意時間是有規則的,注意在傳遞參數時如果遇到非法時間,則将hour、min、sec值都設為0 或要求重新輸入
   ~Time();//析構函數
   void  setTime(int h,int m,int s); //重新設定時間
   void  showTime(); //顯示時間
   void  timeAdd(int h, int m ,int s); //進行時間相加,參數為時、分、秒
   void  timeAdd(int s); //進行時間相加,參數為秒 
   Time operator++();   //對++進行運算符重載,作為對象的前置運算符
   Time operator++(int);  //對++進行運算符重載,作為對象的後置運算符
   friend Time operator+(Time t1,Time t2);  //對+進行運算符重載,完成對兩個Time類對象的相加操作
   friend Time operator+(Time t1,int s);  //對+進行運算符重載,完成對1個Time類對象和整數的相加操作
   friend ostream & operator<<(ostream & output,Time & t); //對<<進行運算符重載,完成對Time類對象的輸出操作
   friend istream & operator>>(istream & input,Time & t);  //對>>進行運算符重載,完成對Time類對象的輸入操作
   friend bool operator>(Time t1,Time t2); //對>進行運算符重載,完成對兩個Time類對象的大于比較操作
   friend bool operator<(Time t1,Time t2);  //對<進行運算符重載,完成對兩個Time類對象的小于比較操作
   friend bool operator==(Time t1,Time t2);  //對==進行運算符重載,完成對兩個Time類對象的等于比較操作
   friend bool operator!=(Time t1,Time t2);  //對!=進行運算符重載,完成對兩個Time類對象的不等于比較操作
  private:
    int hour; 
	int min;
	int sec;
};

Time::Time(int h, int m, int s) //帶3個參數值的構造函數,注意時間是有規則的,注意在傳遞參數時如果遇到非法時間,則将hour、min、sec值都設為0 或要求重新輸入
{
	hour=(h>=0&&h<24)?h:0;
	min=(m>=0&&m<60)?m:0;
    sec=(s>=0&&s<60)?s:0;
}

Time:: ~Time()//析構函數
{
}

void  Time::setTime(int h,int m,int s) //重新設定時間
{
  	hour=(h>=0&&h<24)?h:0;
	min=(m>=0&&m<60)?m:0;
    sec=(s>=0&&s<60)?s:0;
}

void  Time::showTime()  //顯示時間
{
  cout<<hour<<":"<<min<<":"<<sec<<endl;
}

void  Time::timeAdd(int h, int m ,int s) //進行時間相加,參數為時、分、秒
{
	if(h<0||h>=24||m<0||m>=60||s<0||s>=60)
	{cout<<"時間參數有誤,計算時間相加不成功"<<endl;
	}
	else
	{
	  cout<<hour<<":"<<min<<":"<<sec;
	  hour=(hour+h+(min+m+(sec+s)/60)/60)%24;
	  min=(min+m+(sec+s)/60)%60;
	  sec=(sec+s)%60;
	  cout<<"+"<<h<<":"<<m<<":"<<s<<"="<<hour<<":"<<min<<":"<<sec<<endl;
	}    
}

void  Time::timeAdd(int s) //進行時間相加,參數為秒 
{
      cout<<hour<<":"<<min<<":"<<sec;
	  hour=(hour+(min+(sec+s)/60)/60)%24;
	  min=(min+(sec+s)/60)%60;
	  sec=(sec+s)%60;
	  cout<<"+"<<s<<"="<<hour<<":"<<min<<":"<<sec<<endl;
}

Time Time::operator++()  //對++進行運算符重載,作為對象的前置運算符
{ 
   hour=(hour+(min+(sec+1)/60)/60)%24;
   min=(min+(sec+1)/60)%60;
   sec=(sec+1)%60;
   return *this;  //傳回改變後的對象
}


Time Time::operator++(int)  //對++進行運算符重載,作為對象的後置運算符
{
   Time temp=*this;
   hour=(hour+(min+(sec+1)/60)/60)%24;
   min=(min+(sec+1)/60)%60;
   sec=(sec+1)%60;
   return temp;  //傳回改變前的對象
}

 Time operator+(Time t1,Time t2)//對+進行運算符重載,完成對兩個Time類對象的相加操作
{
  Time t3;
  t3.hour=(t1.hour+t2.hour+(t1.min+t2.min+(t1.sec+t2.sec)/60)/60)%24;
  t3.min=(t1.min+t2.min+(t1.sec+t2.sec)/60)%60;
  t3.sec=(t1.sec+t2.sec)%60;
  return t3;
}
  
Time operator+(Time t1,int s) //對+進行運算符重載,完成對1個Time類對象和整數的相加操作
{
  Time t2;
  t2.hour=(t1.hour+(t1.min+(t1.sec+s)/60)/60)%24;
  t2.min=(t1.min+(t1.sec+s)/60)%60;
  t2.sec=(t1.sec+s)%60;
  return t2;
}

ostream & operator<<(ostream & output,Time & t) //對<<進行運算符重載,完成對Time類對象的輸出操作
{
  output<<t.hour<<":"<<t.min<<":"<<t.sec<<endl;
  return output;
}

istream & operator>>(istream & input,Time & t) //對>>進行運算符重載,完成對Time類對象的輸入操作
{
  cout<<"input the hour :";
  input>>t.hour;
  cout<<"input the min :";
  input>>t.min;
  cout<<"input the sec:";
  input>>t.sec;
  return input;
}

  bool operator>(Time t1,Time t2) //對>進行運算符重載,完成對兩個Time類對象的大于比較操作
  {
    if(t1.hour>t2.hour)
		return true;
	if(t1.hour==t2.hour&&t1.min>t2.min)
		return true;
	if(t1.hour==t2.hour&&t1.min==t2.min&&t1.sec>t2.sec)
		return true;
	return false;
  }
  bool operator<(Time t1,Time t2) //對<進行運算符重載,完成對兩個Time類對象的小于比較操作
  {
    if(t1.hour<t2.hour)
		return true;
	if(t1.hour==t2.hour&&t1.min<t2.min)
		return true;
	if(t1.hour==t2.hour&&t1.min==t2.min&&t1.sec<t2.sec)
		return true;
	return false;
  }
  bool operator==(Time t1,Time t2) //對==進行運算符重載,完成對兩個Time類對象的等于比較操作
  {if(t1.hour==t2.hour&&t1.min==t2.min&&t1.sec==t2.sec)
		return true;
	else
		return false;  
  }

  bool operator!=(Time t1,Time t2) //對!=進行運算符重載,完成對兩個Time類對象的不等于比較操作
  {if(t1.hour==t2.hour&&t1.min==t2.min&&t1.sec==t2.sec)
		return false;
	else
		return true;  
  }

int main()
{
 Time t1(1,2,3);   //定義時間對象
 cout<<"t1=";
 t1.showTime();    //顯示時間資訊
 t1.timeAdd(2,3,4);   //進行分、時、秒的相加操作
 cout<<"t1=";
 t1.showTime();    //顯示時間資訊
 t1.timeAdd(22,59,4);  //進行分、時、秒的相加操作
 cout<<"t1=";
 t1.showTime();   //顯示時間資訊
 t1.timeAdd(155);  //進行秒的相加操作
 cout<<"t1=";
 t1.showTime();   //顯示時間資訊
  
 Time t2(25,62,-9); //定義時間對象
 cout<<"t2=";
 t2.showTime(); //顯示時間資訊
 cout<<endl;
 
 t2=t1++;   //++運算符重載函數調用,對象後置運算符
 cout<<"after  t2=t1++"<<endl;
 cout<<"t1=";
 t1.showTime();
 cout<<"t2=";
 t2.showTime();


 t2=++t1; //++運算符重載函數調用,對象前置運算符
 cout<<"after  t2=++t1"<<endl;
 cout<<"t1=";
 t1.showTime();
 cout<<"t2=";
 t2.showTime();

 Time t3;
 t3=t1+t2;  //+運算符重載函數調用,完成兩個對象相加
 cout<<"after  t3=t1+t2"<<endl;
 cout<<"t3=";
 t3.showTime();

 t3=t3+100; //+運算符重載函數調用,完成一個對象和秒的相加
 cout<<"after  t3=t3+100"<<endl;
 cout<<"t3=";
 t3.showTime();

 cout<<"input t1 again"<<endl;
 cin>>t1;          //>>運算符重載函數調用,完成對象輸入
 cout<<"t1="<<t1;  //<<運算符重載函數調用,完成對象輸出
 cout<<"input t2 again"<<endl;
 cin>>t2;         //>>運算符重載函數調用,完成對象輸入
 cout<<"t2="<<t2; //<<運算符重載函數調用,完成對象輸出
 if(t1>t2)     //>運算符重載函數調用,完成對象比較
	 cout<<"t1>t2"<<endl;
 if(t1<t2)     //<運算符重載函數調用,完成對象比較
	 cout<<"t1<t2"<<endl;
 if(t1==t2)    //==運算符重載函數調用,完成對象比較
	 cout<<"t1==t2"<<endl;
 if(t1!=t2)    //!=運算符重載函數調用,完成對象比較
	 cout<<"t1!=t2"<<endl;
 return 0;
}
           
時間類--運算符重載函數--gyy