重载操作符的目的:的
C++中预定义的运算符的操作对象仅限于基本的内置数据类型
大多时候我们需要对我们的类似类型进行类似运算,这个时候我们需要对运算符进行重新定义,赋予其新内容
赋予其新的功能,以满足自身的需求
运算符重载的实质就是函数重载或函数多态。运算符重载是一种形式的C++多态。目的在于让人能够用同名的函数来完成不同的基本操作。
基本格式如下:
<返回类型说明符> operator <运算符符号>(<参数表>)
{
<函数体>
}
一个使用案例如下:
我们通过构造一个时间类 来实现时间与时间之间的相加,求出当前的时间
#include <iostream>
using namespace std;
class CmyTime {
private:
int m_hours;
int m_minutes;
public:
//构造函数与析构函数
CmyTime();
CmyTime(int h, int m = 0);
~CmyTime();
//void AddMin(int m); //分钟的相加
//void AddHr(int h); //小时的相加
//void Reset(int h = 0, int m = 0); //重置
CmyTime* Sum(const CmyTime *t) const; //时间的相加:相加方式1
CmyTime operator+(const CmyTime t) const; //时间的相加:相加方式2
//时间的相加方式3 指针相加:
void show() const; //显示结果
};
我们可以实现一个函数 通过一个时间对象调用函数和另外一个时间对象相加
CmyTime* CmyTime::Sum(const CmyTime *t) const {
CmyTime* sum = new CmyTime(); //类中的属性相加
sum->m_minutes = t->m_minutes + this->m_minutes;
sum->m_hours = t->m_hours + this->m_hours + sum->m_minutes / 60;
sum->m_minutes %= 60;
return sum;
}
调用方式如下:
//用来相加的时间
CmyTime* planningTime = new CmyTime(); //默认时间
CmyTime* coding = new CmyTime(2, 40);
CmyTime* fixing = new CmyTime(5, 55);
planningTime->show();
coding->show();
fixing->show();
//时间总和
CmyTime* total = new CmyTime();
total = coding->Sum(fixing); //相加函数的调用
cout << "After the sum: " << endl;
total->show();
在上面的例子中,时间对象coding通过调用自定义相加函数sum,将时间对象fixing与之相加
这样使用会显得有些繁琐
我们可以通过重载操作符来实现相加
方法如下:首先对操作符进行重载 重载方法如下
CmyTime CmyTime::operator+(const CmyTime t) const
{
CmyTime sum;
sum.m_minutes = t.m_minutes + this->m_minutes;
sum.m_hours = t.m_hours + this->m_hours + sum.m_minutes / 60;
sum.m_minutes %= 60;
return sum;
}
重点来了:我们可以使用类似于整数相加的方法 把两个类对象进行相加
//时间总和:相加方式2
CmyTime planning2;
CmyTime coding2(2,40);
CmyTime fixing2(5,55);
CmyTime sumTime;
cout << endl << endl;
cout << "After the sum method 2: " << endl;
sumTime = coding2 + fixing2; //重载后的加号可以把两个CmyTime类对象直接相加
sumTime.show();
这是最简单的一个例子 之后会有更多的方法和例子介绍