首先回忆下以前学的函数重载
函数重载
- 函数重载的本质为相互独立的不同函数
- 通过函数名和函数参数来确定函数调用
- 无法直接通过函数名得到重载函数的入口地址
- 函数重载必然发生在同一个作用域中
类中的函数重载
- 静态成员函数能与普通成员函数建立重载关系
- 全局函数和成员函数不能构成重载关系
操作符重载(operator)
什么是操作符重载?
大家都知道,在C里,有'+,-,*,/'这些操作符,且它们的功能就是实现普通变量运算。
由于C++是面向对象的,遇到的变量大多都是对象,所以优化了C里的操作符,使它们拥有了重载能力.能通过一定方式,使对象能进行'+,-,*,/'等运算.
操作符的重载是以函数的方式进行.
操作符重载定义
操作符重载,通过operator关键字在函数前定义:
1 2 3 4 5 6 7 |
|
作符重载有几种方式 : 全局操作符重载函数、全局操作符重载函数
编译器首先会判断运算的若是对象,就会先从类里寻找成员操作符重载函数,若没找到,就会再去全局里寻找全局操作符重载函数.
注意事项:
- 操作符重载不能改变原操作符的优先级
- 操作符重载不能改变操作数的个数
- 操作符重载的参数一般设为const class_name &类型(若只设为const class_name,会产生临时对象)
- 在C++中,有些操作符必须需要有对象支持,所以只能为成员函数.这种被称为一元操作符
比如赋值(=)、下标([])、下标([])、调用(())和成员访问箭头(->):
1 |
|
有些操作符既可以当做成员操作符重载函数,也可以当做全局操作符重载函数,由于函数参数可以多个,便称为二元操作符
比如加法(+),与(&&),或(||),逗号(,)等:
以加法(+)为例,当设为全局操作符重载函数时,执行
1 |
|
以加法(+)为例,当设为成员操作符重载函数时,执行
1 |
|
多个重载的操作符重载函数
由于操作符重载函数带参数,所以可以存在多个相同的操作符重载函数
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
初步试验
1.接下来,来个全局操作符重载函数例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |