对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。
运算符重载的实质是编写以运算符作为名称的函数。不妨把这样的函数称为运算符函数。运算符函数的格式如下:
运算符重载为全局函数时,参数的个数等于运算符的目数(即操作数的个数);运算符重载为成员函数时,参数的个数等于运算符的目数减一。
作用:实现两个自定义数据类型相加的运算。
没有重载:
报错
换成加整数也可以
总结1:对于内置的数据类型的表达式的的运算符是不可能改变的
总结2:不要滥用运算符重载
作用:可以输出自定义数据类型
不会利用成员函数重载<<,因为无法实现cout在左侧
cout是输出流对象,全局只能有一个,因此ostream &cout
总结:重载左移运算符配合友元可以实现输出自定义数据类型
作用: 通过重载递增运算符,实现自己的整型数据
前置++:
C++ 规定,在重载++
或--
时,允许写一个增加了无用 int 类型形参的版本,编译器处理++
或--
前置的表达式时,调用参数个数正常的重载函数;处理后置表达式时,调用多出一个参数的重载函数。来看下面的例子:
前置完整代码:
后置完整代码:
将对象的值赋值给另一个对象
c++编译器至少给一个类添加4个函数
如果类中有属性指向堆区,做赋值操作时也会出现深浅拷贝问题
会显示为:
因为:堆区内存重复释放,系统崩溃!
解决方案:利用深拷贝来解决浅拷贝带来的问题。
多个对象时
可以让两个自定义类型对象进行对比操作
示例:
!=运算符:
示例:
做加法: