点击这里给我发消息 点击这里给我发消息

什么是C++运算符重载

添加时间:2013-12-7
    相关阅读: 程序 C++ 系统
 

所谓重载,就是重新赋予新的含义,函数重载就是对一个已有的函数赋予新的含义,使之实现新功能,运算符也可以重载,实际上,我们已经在不知不觉之中使用了运算符重载。

现在要讨论的问题是: 用户能否根据自己的需要对C++已提供的运算符进行重载,赋予它们新的含义,使之一名多用,譬如,能否用“+”号进行两个复数的相加,在C++中不能在程序中直接用运算符“+”对复数进行相加运算,用户必须自己设法实现复数相加。例如用户可以通过定义一个专门的函数来实现复数相加,见例10.1。

例10.1 通过函数来实现复数相加。
#include <iostream>
using namespace std;
class Complex //定义Complex类
{
   public:
   Complex( ){real=0;imag=0;}    //定义构造函数
   Complex(double r,double i){real=r;imag=i;}  //构造函数重载
   Complex complex_add(Complex &c2);  //声明复数相加函数
   void display( );  //声明输出函数
   private:
   double real;  //实部
   double imag;  //虚部
};

Complex Complex∷complex_add(Complex &c2)
{
   Complex c;
   c.real=real+c2.real;
   c.imag=imag+c2.imag;
   return c;
}

void Complex∷display( ) //定义输出函数
{
   cout<<″(″<<real<<″,″<<imag<<″i)″<<endl;
}
int main( )
{
   Complex c1(3,4),c2(5,-10),c3;//定义3个复数对象
   c3=c1.complex_add(c2); //调用复数相加函数
   cout<<″c1=″; c1.display( );//输出c1的值
   cout<<″c2=″; c2.display( );//输出c2的值
   cout<<″c1+c2=″; c3.display( );//输出c3的值
   return 0;
}
运行结果如下:
c1=(3+4i)
c2=(5-10i)
c1+c2=(8,-6i)

结果无疑是正确的,但调用方式不直观、太烦琐,使人感到很不方便。能否也和整数的加法运算一样,直接用加号“+”来实现复数运算呢?如
   c3=c1+c2;
编译系统就会自动完成c1和c2两个复数相加的运算。如果能做到,就为对象的运算提供了很大的方便。这就需要对运算符“+”进行重载。

运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调用该函数,以实现相应的运算。也就是说,运算符重载是通过定义函数实现的。运算符重载实质上是函数的重载。

重载运算符的函数一般格式如下:
函数类型 operator 运算符名称 (形参表列)
{ 对运算符的重载处理 }

例如,想将“+”用于Complex类(复数)的加法运算,函数的原型可以是这样的:
   Complex operator+ (Complex& c1,Complex& c2);

咨询热线:020-85648757 85648755 85648616 0755-27912581 客服:020-85648756 0755-27912581 业务传真:020-32579052
广州市网景网络科技有限公司 Copyright◎2003-2008 Veelink.com. All Rights Reserved.
广州商务地址:广东省广州市黄埔大道中203号(海景园区)海景花园C栋501室
= 深圳商务地址:深圳市宝源路华丰宝源大厦606
研发中心:广东广州市天河软件园海景园区 粤ICP备05103322号 工商注册