深入解析C++编程中的运算符重载

2020-01-06 15:03:53王振洲
易采站长站为您分析C++编程中的运算符重载,运算符重载是C++入门学习中的基础知识,需要的朋友可以参考下  

C++中预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型,也需要有类似的运算操作。例如: 


class complex 
{ 
 public: 
 complex(double r=0.0,double I=0.0){real=r;imag=I;} 
 void display(); 
 private: 
 double real; 
 double imag; 
}; 
complex a(10,20),b(5,8); 

“a+b”运算如何实现?这时候我们需要自己编写程序来说明“+”在作用于complex类对象时,该实现什么样的功能,这就是运算符重载。运算符重载是对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据导致不同类型的行为。 
运算符重载的实质是函数重载。在实现过程中,首先把指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参,然后根据实参的类型来确定需要调用达标函数,这个过程爱编译过程中完成。

一、 运算符重载的规则 
运算符重载规则如下: 
①、 C++中的运算符除了少数几个之外,全部可以重载,而且只能重载C++中已有的运算符。 
②、 重载之后运算符的优先级和结合性都不会改变。 
③、 运算符重载是针对新类型数据的实际需要,对原有运算符进行适当的改造。一般来说,重载的功能应当与原有功能相类似,不能改变原运算符的操作对象个数,同时至少要有一个操作对象是自定义类型。 
不能重载的运算符只有五个,它们是:成员运算符“.”、指针运算符“*”、作用域运算符“::”、“sizeof”、条件运算符“?:”。 
运算符重载形式有两种,重载为类的成员函数和重载为类的友元函数。 
运算符重载为类的成员函数的一般语法形式为: 


函数类型 operator 运算符(形参表) 
{ 
 函数体; 
} 

运算符重载为类的友元函数的一般语法形式为: 


friend 函数类型 operator 运算符(形参表) 
{ 
 函数体; 
} 

其中,函数类型就是运算结果类型;operator是定义运算符重载函数的关键字;运算符是重载的运算符名称。 
当运算符重载为类的成员函数时,函数的参数个数比原来的操作个数要少一个;当重载为类的友元函数时,参数个数与原操作数个数相同。原因是重载为类的成员函数时,如果某个对象使用重载了的成员函数,自身的数据可以直接访问,就不需要再放在参数表中进行传递,少了的操作数就是该对象本身。而重载为友元函数时,友元函数对某个对象的数据进行操作,就必须通过该对象的名称来进行,因此使用到的参数都要进行传递,操作数的个数就不会有变化。