侯捷-C++面向对象高级开发(操作符重载与临时对象)

侯捷-C++面向对象高级开发(操作符重载与临时对象)

1.操作符重载与临时对象

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KPfWyDXY-1636779233680)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211113114845061.png)]

任何成员函数有一个隐藏的this pointer指向,指向调用者。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a3qAQmDX-1636779233682)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211113115528363.png)]

传递者无需知道接收者是以什么形式接收

就比如下面方框内c1以value方式传递,接收者以引用方式接收

如果下面方框的操作那么成员函数的inline写成void也没问题,但是如果是右边方框的内容就不行

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y4Rzai7F-1636779233683)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211113121428930.png)]

complex::function...//这种是成员函数
function...   //这种是全局函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YTiJORIl-1636779233684)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211113121641355.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D6w3lHps-1636779233686)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211113122017725.png)]

全局函数与成员函数的区别在于后者有this pointer

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mBlWbfij-1636779233687)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211113122255575.png)]

操作之后的结果存下来之后会释放

注:typename()就是要创建临时对象

右边方框中前两行黄色的执行到空的那行就不见了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dqGUMH7y-1636779233687)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211113123001380.png)]

这里不能返回引用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QCugdgdS-1636779233688)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211113123318931.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NJixbj4T-1636779233689)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211113124327852.png)]

操作符有两种写法一种是成员函数写法一种是非成员函数的写法

由于要支持连串的输出所以返回的要用引用而不能void

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1JimAVSy-1636779233689)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211113125016683.png)]

总结写一个类的注意事项:

  • 会用构造函数的initialization list
  • 函数要不要加const
  • 参数传递尽量用引用,还要考虑要不要加const
  • return 的时候by value还是by reference
  • 数据放在private,函数放在public

猜你喜欢

转载自blog.csdn.net/qq_47997583/article/details/121302976