重载操作符 与 友元

/////////////////////////////////////////////////////////////////////////////
//* 友元函数在类申明中用friend前缀  函数定头不加 
//*重载operator操作符 (argment-list)
//*通常在重载<<时候用友元函数
//*成员函数一个用this指针隐式的传递,一个用函数参数传递
友元函数操作数都作为参数传递

//*ep:
friend std::ostream & operator << (std::ostream & os,const ClassName & st);






/////////////////////////////////////////////////////////////////////////////
////////////main.cpp////////////////////////////////////////////////////
#include <iostream>
#include "mytime.h"

int main()
{
 using std::cout;
 using std::endl;

 Time aida(3,35);
    Time tosca(2,48);
 Time temp;

 cout<<"aida and tosca:\n";
 cout<<aida<<"; "<<tosca<<endl;
 temp=aida+tosca;
 cout<<"aida+tosca="<<temp<<endl;
 temp=aida*1.17;
 cout<<"aida*1.17="<<temp<<endl;
 temp=10*aida;
 cout<<"10*aida="<<temp<<endl;

return 0;
}
//////////////////////////////////////////////////////////////////////////
/////////////////////////////////mytime.h///////////////////////////
#ifndef MYTIME_H_
#define MYTIME_H_

class Time
{
private:
 int hours;
 int minutes;
public:
 Time();
 Time(int h,int m=0);
 void AddMin(int m);
    void AddHr(int h);
 void Reset(int h=0,int m=0);
 Time operator+(const Time & t) const;
 Time operator-(const Time & t) const;
 Time operator*(double n) const;
 friend Time operator * (double m,const Time & t)
 {return t*m;}
 friend std::ostream & operator << (std::ostream & os,const Time & t);
};

#endif
///////////////////////////////////////////////////////////////////
//////////////////////////////mytime.cpp///////////////////
#include <iostream>
#include "mytime.h"

Time::Time()
{
 hours=minutes=0;
}

Time::Time(int h,int m)
{
    hours=h;
 minutes=m;
}

void Time::AddMin(int m)
{
 minutes+=m;
 hours+=minutes/60;
 minutes%=60;
}
void Time::AddHr(int h)
{
 hours+=h;
}

void Time::Reset(int h,int m)
{
 hours=h;
    minutes=m;
}
Time Time::operator+(const Time & t) const
{
 Time sum;
 sum.minutes=minutes+t.minutes;
 sum.hours=sum.minutes%60;
 return sum;
}

Time Time::operator-(const Time & t) const
{
 Time diff;
 int tot1,tot2;
 tot1=t.minutes+60*t.hours;
 tot2=minutes+60*hours;
 diff.minutes=(tot2-tot1)%60;
 diff.hours=(tot2-tot1)/60;
 return diff;
}

Time Time::operator*(double mult) const
{
 Time result;
 long totalminutes=hours*mult*60+minutes*mult;
 result.hours=totalminutes/60;
 result.minutes=totalminutes%60;
 return result;
}

std::ostream & operator << (std::ostream & os,const Time & t)
{
 os<<t.hours<<" hours, "<<t.minutes<<" minutes.";
 return os;
}

posted @ 2007-02-18 01:15  Edward Xie  阅读(382)  评论(0)    收藏  举报