运算符重载概念:对已有的运算符进行重新定义。赋予其另一种功能,以适应不同的数据类型。
加法重载运算符
加号运算符重载:operator+(函数重载版本 也可以改类型如person+int类型)
作用:实现两个自定义数据类型相加的运算。
![](https://i-blog.csdnimg.cn/blog_migrate/57cd518343db79d49010a37a5c83258e.png)
案例:
![](https://i-blog.csdnimg.cn/blog_migrate/5593d39ba5f861bb825909cc419c14fe.png)
总结:
1:对于内置的数据类型的表达式的运算符是不能改变的。
2:不要滥用运算符重载
2.左移运算符重载
作用:可以输出自定义数据类型
![](https://i-blog.csdnimg.cn/blog_migrate/2e025b37109e465eeaa0732792756bc1.png)
3.递增运算符重载
作用:通过重载递增运算符,实现自己的整型数据
![](https://i-blog.csdnimg.cn/blog_migrate/95558d555f6eaae939f290f5b2f8a915.png)
同此例子:
4.递减运算符重载
案例:
![](https://i-blog.csdnimg.cn/blog_migrate/e19e2a740583a58282c6a734b61a9e5d.png)
5.赋值运算符重载
赋值运算符重载
C++编译器至少给一个类添加4个函数
1.默认构造函数(无参,函数体为空)
2.默认析构函数(无参,函数体为空)
3.默认拷贝函数,对属性进行值拷贝
4.赋值运算符operator=,对属性进行值拷贝
如果类中有属性指向堆区,做赋值操作时也会出现深浅拷贝问题。
案例:
![](https://i-blog.csdnimg.cn/blog_migrate/03696d134add599542ae34ff49b24c8d.png)
例子中要深拷贝的原因:
![](https://i-blog.csdnimg.cn/blog_migrate/b681a412a77ed019eec9d2d8c1a7d936.png)
6.关系运算符重载
关系运算符重载:
作用:重载关系运算符,可以让两个自定义类型对象进行对比操作
![](https://i-blog.csdnimg.cn/blog_migrate/d54483c7b58b91ad4604bb5876e8f53b.png)
7.函数运算符重载
函数调用运算符重载
函数调用运算符()也可以重载
由于重载后使用的方式非常像函数的调用,因此称仿函数
仿函数没有固定写法,非常灵活
![](https://i-blog.csdnimg.cn/blog_migrate/a9afdafe0c0cbeeaf89c1c2b4afede25.png)