C++基础(6)——类和对象(运算符重载)

前言

本文主要介绍了C++中运算符重载的基本知识。

4.5.1:加号运算符重载(成员函数和全局函数都可实现)

运算符重载:对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型

1:成员函数重载+号,this指针指向的是+号左侧的对象

本质:Person p3 = p1.operator+(&p2);

想用引用作为函数的返回值就要先在堆区开辟内存,栈区的局部变量会在函数执行完之后释放

2:全局函数实现运算符重载

本质: Person p3 = operator+(p1, p2);

operator+函数可以实现重载,创建一个就只有类名和Person不同的Human类,同时通过全局函数来实现运算符重载,这是编译器会根据operator+()函数参数的不同来选择使用那一个函数

 根据参数不同选择不同的重载函数,即运算符重载也可以发生函数重载

对于内置的数据类型的表达式的运算符是不能改变的

4.5.2:左移运算符重载(全局函数实现)

重载左移运算符可以实现自定义数据类型的输出

左移运算符如果使用成员函数进行重载会出现的问题

void operator<<(cout)会简化成 p << cout,p是一个对象

cout是输出流ostream的一个对象

当operator<<重载函数的返回值是void类型时

但是如果想要在cout << p后面再使用<<就会报错了,因为没有用到链式的原则

当operator<<重载函数的返回值是ostream&类型时,就可以像普通的使用cout那样使用,也用到了函数重载的原理

4.5.3:++递增运算符重载

1:前置递增

结合友元、<<运算符重载,可以实现前缀++重载的效果

假如对myint执行两次++的操作,且将operator++的返回类型改成MyInt,而不是引用,那么会新构建一个对象,并对新对象进行操作

 使用引用&的目的是为了一直对一个对象进行操作,改成引用&输出结果就是想要的了

2:后置递增(为了和前置++区分,要使用到函数的占位参数)

后置++使用值返回或者引用返回两种情况

引用返回:

值返回:

4.5.4:赋值运算符重载

如果使用默认的=运算符进行一些对象的赋值,可能会出现一些浅拷贝直接值赋值的问题

 如果重写析构函数进行delete,就会出现内存多次释放的问题

 进行赋值运算符重载

4.5.5:关系运算符重载

这里重新实现>运算符

改成引用之后再进行参数传入就不会创建一个新的对象,也就不会出现多次delete内存的情况

4.5.6:函数调用运算符()重载,仿函数、匿名对象

1:仿一个返回值是void,参数是string的()

2:仿一个返回值为int,入口参数(int,int)

总结

以上就是本文的全部内容,非常感谢你能看到这。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

门牙会稍息

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值