运算符的重载使得我们可以更加方便的使用常见的运算符进行操作。
重载运算符的函数格式如下:
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