首页 理论教育C++运算符重载:基础教程所解析

C++运算符重载:基础教程所解析

【摘要】:所谓运算符重载就是对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据时导致不同的行为,即完成不同的运算功能。在C++语言中,可以将运算符看着函数,运算符重载是通过运算符重载函数来实现的。C++运算符重载需要遵循的相关规则如下:不是所有的运算符都能重载,可以重载的运算符见表4.1所示,不能重载的运算符见表4.2所示。表4.1C++中可以重载的运算符表4.2C++中不能重载的运算符

所谓运算符重载就是对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据时导致不同的行为,即完成不同的运算功能。

在C++语言中,可以将运算符看着函数,运算符重载是通过运算符重载函数来实现的。例如,运算符“+”之所以既能实现实数相加,又能实现复数相加,还能实现字符串连接,就是预先定义了一系列重载函数:

double operator+(double,double);

Complex operator+(Complex&c);

char*operator+(char*,char*);

分别用“+”运算符完成两个实数、两个复数和两个字符串的相关运算。

这就是“+”运算符的重载。当编译器遇到重载运算符,如复数加法x1+x2中的加号运算符“+”时,自动调用“+”运算符的重载函数完成两个复数对象的加法操作。

由于运算符重载是通过运算符重载函数来完成的,因此,如何编写运算符重载函数以及如何调用运算符重载函数,就成了本章讨论的重点。

C++运算符重载需要遵循的相关规则如下:

(1)不是所有的运算符都能重载,可以重载的运算符见表4.1所示,不能重载的运算符见表4.2所示。(www.chuimin.cn)

(2)不能改变运算符的优先级和结合性(例如,算术运算符的结合性为从左到右,这一点不能改变)。

(3)默认参数不能和重载的运算符一起使用,也就是说,在设计运算符重载成员函数时不能使用默认参数。

(4)不能改变运算符的操作数的个数以及操作数的左右位置。

(5)不能创建新的运算符,只有C++预定义的运算符可以被重载。

(6)运算符作用于C++内部提供的数据类型时,原来含义保持不变。

(7)运算符重载函数既可以作为类的成员函数,也可以作为全局函数。

表4.1 C++中可以重载的运算符

表4.2 C++中不能重载的运算符