c++重载运算符、友元函数

运算符的重载使得我们可以更加方便的使用常见的运算符进行操作。

重载运算符的函数格式如下:

operatorop(argement-list)

接下来的例子中,我们将定义一个Time类,并通过重载运算符+和<<来实现时间的加法和输出显示,其中会使用友元函数(friend)

time.h

#ifndef TIME_H
#define TIME_H
#include <iostream>
class Time{
  private:
  	int minute;
  	int hour;
  public:
  	Time();
  	Time(int h=0,int m=0);
		Time operator+(const Time & t)const;				//重载运算符+
  	friend std::ostream & operator<<(std::ostream & os, const Time & t);//重载运算符<<,使用了友元函数
}
#end if

time.cpp

#include"time.h"
Time::Time(){
  hour=minute=0;
}
Time::Time(int h,int m){
  hour=h;
  minute=m;
}
Time operator+(const Time & t)const{
  Time sum;
  sum.minute=minute+t.minute;
  sum.hour=hour+t.hour;
  sum.minute%=60;
  return sum;
}
//友元函数只需要在原型处使用friend,在定义时不需要使用friend
std::ostream & operator<<(std::ostream & os, const Time &t){
  os<<t.hour<<"hours,"<<t.minute<<"minutes";
  return os;
}

main.cpp

#include<iostream>
#include"time.h"
int main(){
  using std::cout;
  using std::endl;
  Time aida(3,35);
  Time tosca(2,48);
  //<<重载时使用友元函数,是因为<<操作符的调用对象并不是time,而是cout(ostream对象)
  //使用友元函数可以让非成员函数调用类对象。
  cout<<"aida:"<<aida<<";tosca:"<<tosca<<endl;
  cout<<"aida+tosca="<<aida+tosca<<endl;		//直接使用+完成时间的相加
  return 0;
}


//output
aida:3 hours,35 minutes
tosca:2 hours,48 minutes
aida+tosca=4 hours,11 minutes
上一篇:linux crontab 简单说明


下一篇:Android开发问题总结(一)