重载操作符 与 友元
/////////////////////////////////////////////////////////////////////////////
//* 友元函数在类申明中用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;
}


浙公网安备 33010602011771号