1.什么是运算符重载

运算符重载是一种函数重载。

运算符函数的格式:
operatorop(argument-list)
例如,operator+()重载+运算符。
其中的op,必须是有效的C++运算符,如operator@()会报错,因为C++中没有@运算符。

2.重载运算符的使用

如下例所示:

class Test
{
public:
Test operator+(Test &test);
}

调用运算符函数的方式有两种:
Test t1;
Test t2;
1)普通函数调用
Test t3 = t1.operator+(t2);
2)运算符方式调用,实质上是调用的1)中的operator+()函数
Test t3 = t1+t2;

3.运算符重载示例
示例代码如下,+运算符重载,计算时分相加。

mytest.h

#pragma once
class Time
{
private:
int hours;
int minutes;
public:
Time();
Time(int h,int m=);
Time operator+(const Time&t) const;
void Show() const;
};

mytest.cpp

#include "mytest.h"
#include<iostream>
Time::Time()
{
hours=minutes=;
}
Time::Time(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/;
sum.minutes%=;
return sum;
}
void Time::Show() const
{
std::cout<<hours<<" hours, "<<minutes<<" minutes"<<std::endl;
}

test.cpp

#include "mytest.h"
#include <iostream>
int main()
{
Time planning;
Time coding(,);
Time fixing(,);
Time total; total = coding+fixing; std::cout<<"coding+fixing = ";
total.Show(); total = coding.operator+(fixing);
std::cout<<"coding.operator+(fixing) = ";
total.Show(); total = coding+fixing+coding;
std::cout<<"coding.operator+(fixing) = ";
total.Show(); return ;
}

输出结果:

4.运算符重载的注意事项:
1)重载的运算符必须是有效的C++运算符
2)运算符操作数至少有一个是用户定义类型
这是为了防止重载标准类型的运算符
如将减法运算符(-)重载为计算两个double的和,而不是差,是不被允许的。
3)不能违反运算符原有的规则
如求模运算符(%),必须要有两个操作数。
4)部分运算符不允许重载
如:sizeof,::,:等

参考资料:《C++ Primer.Plus》 pp.381-390

最新文章

  1. 1-安装kvm及虚拟机
  2. SQL Server 里的递归查询
  3. C#泛型代理、泛型接口、泛型类型、泛型方法
  4. Clr编写Insert Triggr
  5. KSFramework常见问题:Excel如何进行SVN协作、差异比较?
  6. javascript实例学习之六—百叶窗效果
  7. linux查看和开放某端口
  8. sort 命令
  9. Matlab:拟合(1)
  10. Erp第三章:管理问题与MRP、MRP2、ERP
  11. localhost和127.0.0.1区别
  12. SSH免密码(日志三)
  13. Windows 性能搜集【perfmon】
  14. 深入学习Redis(2):持久化
  15. jupyter-notebook后home页面空白问题
  16. ActivityLifecycleCallbacks 的简单使用
  17. Linux permission denied问题
  18. [03] 线程同步 synchronized
  19. 【20180409】IT管理之IT十二条令
  20. [Spark][Hive][Python][SQL]Spark 读取Hive表的小例子

热门文章

  1. win10下安装centOS 7 U盘
  2. php大力力 [013节]mySQL数据库乱码问题我还没解决
  3. flex css 布局
  4. 【LeetCode】Best Time to Buy and Sell Stock IV
  5. susy-Toolkit 之翻译
  6. Android RecyclerView(瀑布流)水平/垂直方向分割线
  7. 关于linux python vim的一些基础知识(很零散)
  8. matlab 相同函数名解决
  9. session 原理 数据结构
  10. MyBatis日期有坑