博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++运算符重载详解
阅读量:7302 次
发布时间:2019-06-30

本文共 1601 字,大约阅读时间需要 5 分钟。

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 onceclass Time{private:    int hours;    int minutes;public:    Time();    Time(int h,int m=0);    Time operator+(const Time&t) const;    void Show() const;};

mytest.cpp

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

test.cpp

#include "mytest.h"#include 
int main(){ Time planning; Time coding(2,40); Time fixing(5,55); 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 0;}

输出结果:

 

4.运算符重载的注意事项:

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

 

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

转载地址:http://tpfnm.baihongyu.com/

你可能感兴趣的文章
SpringCloud学习成长之路 六 cloud配置中心
查看>>
MyEclipse定位class文件
查看>>
STM32(HY-SRF05)超声波测距项目
查看>>
《practical Java》读书笔记
查看>>
数据库字段顺序的【坑】
查看>>
spring5新响应式框架-webflux实战
查看>>
软甲架构笔记 三
查看>>
STL training (uva上一些比较好的用来熟悉STL)
查看>>
[未完成]关于CSS的总结
查看>>
陈皓一起写Makefile 概述
查看>>
linux下安装启动rpc服务
查看>>
Software Testing, Lab 1
查看>>
World发布博客测试
查看>>
IIS 提高连接的并发数,和CPU的使用率。
查看>>
修改Sysvol复制方式
查看>>
python3.x中如何使用base64、base32、base16编码解码
查看>>
HDOJ 1084 排序 水
查看>>
深度拷贝一个链表
查看>>
POJ3229
查看>>
用promise封装ajax
查看>>