运算符重载:
在C++中要使用运算符重载,需要使用被称为运算符重载的特殊函数形式。运算符重载的函数的格式如下:
operatorop(argument-list);
以时间相加的函数为例:
1:常规的加法运算符操作:
头文件:
#pragma once
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 Sum(const Time& t) const;
void Show() const;
};
源文件:
#include "mytime0.h"
#include <iostream>
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::Sum(const Time & t) const
{
Time sum;
sum.minutes = minutes + t.minutes;
sum.hours = hours + t.hours + sum.minutes / 60;
sum.minutes %= 60;
return sum;
}
void Time::Show() const
{
std::cout << hours << " hours " << minutes << " minutes"<<std::endl;
}
程序测试:
#include <iostream>
#include "mytime0.h"
using namespace std;
int main()
{
using std::count;
using std::endl;
Time planning;
Time coding(2,40);
Time fixing(5,55);
Time total;
cout << "planning time= " ;
planning.Show();
cout << endl;
cout << "coding time= ";
coding.Show();
cout << endl;
cout << "fixing time= ";
fixing.Show();
cout << endl;
total = coding.Sum(fixing);
cout << "coding.Sum(fixing)= ";
total.Show();
cout << endl;
return 0;
}
程序输出:
planning time= 0 hours 0 minutes
coding time= 2 hours 40 minutes
fixing time= 5 hours 55 minutes
coding.Sum(fixing)= 8 hours 35 minutes
重载加法运算符:
只需要将Sum()的名称改为operator+()即可:
头文件:
#pragma once
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;
void Show() const;
};
源文件:
#include "mytime0.h"
#include <iostream>
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 = hours + t.hours + sum.minutes / 60;
sum.minutes %= 60;
return sum;
}
void Time::Show() const
{
std::cout << hours << " hours " << minutes << " minutes"<<std::endl;
}
和Sum()一样,operator+()也是由Time对象调用,它将第二个Time对象作为参数,并返回一个Time对象。因此,可以像调用Sum()那样来调用operator+() 方法:
total=coding.operator+(fixing);
该方法也可以直接使用运算符方法+:
total=coding + fixing;
这两种使用方法最终的输出结果是相同的。
使用运算符重载的函数名称可以使用函数表示法或运算符表示法来调用它,编译器将根据操作数的类型来确定如何做。