博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++之运算符重载(一元)
阅读量:4970 次
发布时间:2019-06-12

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

 

一、-符号重载

1.成员函数重载负号

 

 

2.友元函数重载负号

 

3.补充说明

<1> 《一元运算符编码实现(一)》课程笔记:

A:事实上,我们的重载运算符返回void、返回对象本身、返回对象引用都是可以的,并不是说一定要返回一个引用,只不过在不同的情况下需要不同的返回值。

那么什么情况下要返回对象的引用呢?

原因有两个:1.允许进行连续赋值2.防止返回对象(返回对象也可以进行连续赋值)的时候调用拷贝构造函数和析构函数导致不必要的开销,降低赋值运算符等的效率。

对于第二点原因:如果用”值传递“的方式,虽然功能任然正确,但由于return语句要把*this拷贝到保存返回值的外部存储单元之中,增加了不必要的开销,会降低赋值函数的效率。

B:用友元函数重载时,参数之所以用引用类型,也是因为原因2,为了降低开销,提高效率。

 

<2> 《一元运算符编码实现(二)》课程笔记:

但是看了这一节,发现后置++的返回值是对象而非引用,因为,如果返回是引用,那么返回的是一块临时变量(old)的引用,

当后置++的函数调用结束后,该临时变量会被自动释放掉,那么返回的引用的值就会是一个-37983219之类的为初始化的值了,发生bug。

 

二、++符号的重载

1.前置++重载

 

2.后置++重载

 

 

《一元运算符编码实现(二)》课程笔记:

operator定义了多个函数重载,定义了能传入一到两个参数的operator

为什么后置要传入int?

在一元operator中,运算符要放在参数前面,也就是operator++(*this),在程序中调用一元运算符的格式:

++coor,-coor

operator(int)其实是二元函数,只是第二个参数是通过隐性的方式传入参数,传入int就相当于定义了二元运算符,也就是(this*, int),

这时运算符的格式就是this*指针加运算符加int类型,再给int传入一个默认值1

例如c++1,这就满足了运算符的格式,因此在使用时变成了c++,函数会执行,而内部如何处理,就由我们随便处理。

为什么定义友元类的时候就要传入参数?

因为如果在类中定义非友元运算符(成员函数),那么默认将传入一个*this指针。

而在定义友元类,在类外定义函数,其实就是给予一个函数对该类所有对象数据的修改权限

但是这个函数默认不会传入*this指针,因为需要在参数表中传入

例如 在类的定义中定义了Coordinate& operator-()

系统默认传入了一个this指针

而在友元运算符中,因为opertor必须至少传入一个参数,因此需要传入一个coordinte对象。

 

转载于:https://www.cnblogs.com/Tang-tangt/p/9678178.html

你可能感兴趣的文章
Ognl中“%”、“#”、“$”详解
查看>>
我对应用软件——美团的看法
查看>>
执行了的程序,才是你的程序.
查看>>
struts2.x + Tiles2.x读取多个xml 配置文件
查看>>
表单校验之datatype
查看>>
python第六篇文件处理类型
查看>>
ubuntu16系统磁盘空间/dev/vda1占用满的问题
查看>>
grid网格布局
查看>>
JSP常用标签
查看>>
九涯的第一次
查看>>
处理器管理与进程调度
查看>>
向量非零元素个数_向量范数详解+代码实现
查看>>
java if 用法详解_Java编程中的条件判断之if语句的用法详解
查看>>
java 什么题目好做_用java做这些题目
查看>>
matlab sin函数 fft,matlab的fft函数的使用教程
查看>>
mysql adddate()函数
查看>>
mysql sin() 函数
查看>>
mysql upper() 函数
查看>>
单片机复位电路
查看>>
php json_decode失败,返回null
查看>>