1、运算符重载的意义
在C++中,运算符的操作对象只能是基本数据类型,而不能对于类、结构体等复杂数据类型进行操作,因此引入了运算符重载机制。运算符重载对已有的运算符赋予多重含义,使得同一个运算符作用于不同类型的数据时做出不同的行为。
运算符重载实际上是函数重载,它提供了C++的可扩展性。
2、运算符重载的规则
1、只能重载C++已有的运算符,不能创建新的运算符。
2、重载之后的运算符不能改变其优先级和结合性,也不能改变其操作数的个数以及语法结构。
3、运算符重载是针对新类型数据的实际需要,对原有运算符进行适当的改造,重载功能应与原有功能相类似,避免没有目的地使用重载运算符。
4、C++中有五个运算符不可以重载:类属关系运算符“.”、成员指针运算符“*”、作用域运算符“::”、sizeof运算符和三目运算符“?:”。
3、运算符重载方式
重载运算符是具有特殊名字的函数,它们的名字由关键字operator和其后要重载的运算符共同组成。即:
1 | 返回类型 operator 运算符(参数列表) |
3.1、重载为类的成员函数
重载为类的成员函数,可以自由地访问本类的数据成员,运算的操作数会以调用者或参数的形式表示。
如果是双目运算符重载为类的成员函数,则它有两个操作数,左操作数一定是对象本身的数据,由this指针指出,右操作数则通过运算符重载函数的参数表来传递,即:
1 | 左操作数.运算符重载函数(右操作数); |
如果是单目运算符重载为类的成员函数,则要分为前置运算符和后置运算符,如果是前置运算符,则它的操作数是函数调用者,函数没有参数,即: