运算符重载.ppt
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 运算 重载
- 资源描述:
-
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,7,章 运算符重载,7.1,运算符重载概述,7.2,运算符函数重载为类的友元函数,和成员函数,7.3,几个常用运算符的重载,7.4,重载插入运算符和提取运算符,7.5,类型转换,本章主要内容,7.1,运算符重载概述,用于完成,“,+,”,、,“,-,”,、,“,*,”,、,“,”,等操作的函数为,运算符函数,。,C+,规定,运算符函数名,为:,operator+,operator-,operator*,operator,等,统称为:,operator (,-,要重载的运算符,),运算符函数名,两个或者两个以上的,运算符函数,共用一个,运算符函数名,为,运算符函数重载,。,C+,系统,已经预先编好,了将两个,基本数据类型,相加的的,运算符函数,,可以直接使用它们。,1.,求两个整数相加,例如,:,int i=2+3;,2.,求两个双精度数相加,例如,:,double d=2.222+3.333;,运算符函数重载,调用预先编好的将两个整型数相加的的运算符函数,调用预先编好的将两个双精度数相加的的运算符函数,C+,系统,预先编好的运算符函数,不能完成将两个对象的相加工作。,例如,:,有一个复数类,complex,:,class complex,public,:,double real,,,imag,;,complex(double r=0,,,double i=0),real=r,;,imag=i,;,;,实现两个对象相加的运算符函数,解决办法:,用户,自己编写,一个,实现,两个对象相加的运算符函数,例如,:,int main(),complex com1(1.1,,,2.2),,,com2(3.3,,,4.4);,complex total,;,total=com1+com2,;,/,return 0,;,就能将类,complex,的两个对象,com1,和,com2,相加,complex,operator+,(complex co1,complex co2),将类,complex,的两个对象相加的运算符函数,operator+(),:,complex,operator+,(complexco1,complex co2),complex temp,;,temp.real=co1.real+co2.real,;,temp.imag=co1.imag+co2.imag,;,return temp,;,调用语句:,total=operator+(com1,,,com2),;,或,:,total=com1+com2,;,就能将类,complex,的两个对象,com1,和,com2,相加,例,7.1-1,将两个,complex,类对象相加的完整程序。,#include,using namespace std;,class complex,public:,double real,imag;,complex(double r=0,double i=0)real=r;imag=i;,;,complex,operator+(,complex co1,complex co2),complex temp;,temp.real=co1.real+co2.real;,temp.imag=co1.imag+co2.imag;,return temp;,运算符函数,operator+(),#include,class complex,public:,double real,imag;,complex(double r=0,double i=0)real=r;imag=i;,;,complex,operator+,(complex co1,complex co2),complex temp;,temp.real=co1.real+co2.real;,temp.imag=co1.imag+co2.imag;,return temp;,运算符函数,operator+(),例,7.1-1,是一个,类外定义的运算符函数,只能访问,公有,数据成员,而不能访问类的,私有,数据成员。,公有的,数据成员,例,7.1-1,存在的问题,但是,实际上类中的数据成员常常是,私有成员,或,保护成员,解决办法,:,(1),定义为它将要操作的类的,成员函数,(,简称为,成员运算符重载函数,);,(2),定义为它将要操作的类的,友元函数,(,简称为,友元运算符重载函数,),。,7.2.1,友元运算符重载函数,在,C+,中,可以把运算符函数定义成某个类的友元函数,称为,友元运算符重载函数,。,1.,友元运算符重载函数定义的语法形式,(1),在类的内部,定义友元运算符重载函数的格式如下,:,friend,函数类型,operator,运算符,(,形参表,),函数体,例如:,两个,complex,对象进行,“,+,”,法运算的友元运算符函数。,class complex,friend complex,operator+,(complex co1,complex co2);,/.,;,complex,operator+,(complex co1,complex co2),/.,在,类的内部,声明原型,在类外定义,友元运算符函数,友元运算符函数,定义时:,若重载的是,双目运算符,,则参数表中有,两个,操作数;,若重载的是,单目运算符,,则参数表中只有,一个,操作数。,#include,/,例,7.2-1,class complex,double real,imag;,public:,friend,complex operator+(complex co1,complex co2);,complex(double r=0,double i=0)real=r;imag=i;,void print()coutreal=real imag=imagendl;,;,complex operator+(complex co1,complex co2),complex temp;,temp.real=co1.real+co2.real;,temp.imag=co1.imag+co2.imag;,return temp;,main(),complex com1(1.1,2.2),com2(3.3,4.4),total1,total2;,total1=operator+(com1,com2);,total1.print();,total2=com1+com2;,total2.print();return 0;,声明友元运算符函数,operator+(),原型,定义友元运算符函数,operator+(),调用,operator+(),的第,1,种方式,调用,operator+(),的第,2,种方式,运行结果如下:,real=4.4 imag=6.6,real=4.4 imag=6.6,若双目友元运算符函数,operator,所需的两个操作数,aa,和,bb,在参数表提供。,一般而言,可以采用以下两种方法使用:,aa bb,;,/,隐式(习惯)调用,operator(aa,,,bb),;,/,显式调用,如上例中:,com1+com2,operator+(com1,com2),说明,:,(1),在函数返回的时候,有时可以直接用类的构造函数来生成一个临时对象,而不对该对象进行命名。,例如,:,Complex operator+(Complex&a,Complex&b),Complex temp;,temp.real=a.real+b.real;,temp.imag=a.imag+b.imag;,return temp;,改为,Complex operator+(Complex&a,Complex&b),return Complex(a.real+b.real,a.imag+b.imag);,建立一个,临时对象,它没有对象名,是一个无名对象,。在建立临时对象过程中调用构造函数。,return,语句将此临时对象作为函数返回值。,(2),Visual C+6.0,提供的不带后缀的,.h,的头文件不支持友元运算符重载函数,在,Visual C+6.0,中编译会出错,这时可,采用带后缀的,.h,头文件,。,这时可将程序中的,#include,using namespace std;,修改成,#include,例如,:,例,7.2-1,中的:,#include,class complex,double real,imag;,public:,friend complex operator+(complex co1,complex co2);,complex(double r=0,double i=0)real=r;imag=i;,void print(),coutreal=real imag=imagendl;,;,取代原程序中的:,#include,using namespace std;,3.,单目友元运算符重载函数,单目运算符只有一个操作数,例如,:,-a,&b,!c,+p,用友元函数重载单目运算符时,需要,一个显式的操作数,。,#include,/,例,7.3-1,class AB,int a,b;,public:,AB(int x=0,int y=0)a=x;b=y;,friend AB operator-(AB obj);,void show();,;,AB operator-(AB obj),obj.a=-obj.a;,obj.b=-obj.b;,return obj;,void AB:show()couta=a b=bendl;,main(),nclass ob1(10,20),ob2;,ob1.show();,ob2=operator-(ob1);,/,或,ob2=-ob1;,ob2.show();,return 0;,隐式调用,main(),AB ob1(10,20),ob2;,ob1.show();,ob2=operator-(ob1);,/,或,ob2=-ob1;,ob2.show();,return 0;,显式调用,隐式调用,运行结果:,a=10 b=20,a=-10 b=-20,#include,/,例,7.4-1,class coord,int x,y;,public:,coord(int i=0,int j=0);,void print();,friend coord operator+(coord op);,;,coord:coord(int i,int j)x=i;y=j;,void coord:print(),cout x:x,y:yendl;,coord operator+(coord op),+op.x;+op.y;return op;,main(),coord ob(10,20);,ob.print();,operator+(ob);,ob.print();,+ob;,ob.print();,return 0;,声明友元运算符函数,operator+(),原型,定义友元运算符函数,operator+(),显式调用,隐式调用,运行结果如下:,x=10 y=20,x=10 y=20,x=10 y=20,为什么不是,?,x=10 y=20,x=11 y=21,x=12 y=22,#include,/,例,7.4-1,class coord,int x,y;,public:,coord(int i=0,int j=0);,void print();,friend coord operator+(coord op);,;,coord:coord(int i,int j)x=i;y=j;,void coord:print(),cout x:x,y:yendl;,coord operator+(coord op),+op.x;+op.y;return op;,main(),coord ob(10,20);,ob.print();,operator+(ob);,ob.print();,+ob;,ob.print();,return 0;,显式调用,隐式调用,运行结果如下:,x=10 y=20,x=10 y=20,x=10 y=20,为什么不是,?,x=10 y=20,x=11 y=21,x=12 y=22,分析原因,本例使用,对象,作为运算符函数的形参,是,传值调用,对象,ob,不随着,op,变化,#include /,例,7.4-2,class coord,int x,y;,public:,coord(int i=0,int j=0);,void print();,friend coord operator+(coord,;,coord:coord(int i,int j)x=i;y=j;,void coord:print(),cout x:x,y:y,real+c.real;,temp.imag=,this-,imag+c.imag;,return temp;,显式调用,A3=A1.operator+(A2);,隐式调用,A3=A1+A2;,以上两个语句的执行结果是完全相同的。,隐含的,左操作数,右操作数,complex complex:,operator+,(complex c),complex temp;,temp.real=,this-,real+c.real;,temp.imag=,this-,imag+c.imag;,return temp;,显式调用,A3=A1.operator+(A2);,隐式调用,A3=A1+A2;,以上两个语句的执行结果是完全相同的。,隐含的,左操作数,右操作数,#include /,例,7.5-1,class complex,double real,imag;,public:,complex(double r=0,double i=0)real=r;imag=i;,complex operator+(complex co2);,void print(),coutreal=real imag=imagendl;,;,complex complex:operator+(complex co2),complex temp;,temp.real=real+co2.real;,temp.imag=imag+co2.imag;,return temp;,成员运算符函数,operator+(),main(),complex com1(1.1,2.2),com2(3.3,4.4),total1,total2;,total1=com1.operator+(com2);,total1.print();,total2=com1+com2;,total2.print();,return 0;,运行结果如下:,real=4.4 imag=6.6,real=4.4 imag=6.6,左操作数,右操作数,显式调用,隐式调用,采用成员函数重载双目运算符,后,一般可以用以下两种方法来调用:,aa bb,;,/,隐式,(,习惯,),调用,aa.operator(bb),;,/,显式调用,如上例中:,com1.operator+(com2),com1+com2,3.,单目成员运算符重载函数,对单目运算符而言,成员运算符函数的参数表中没有参数,此时,当前对象作为运算符的一个操作数,。,#include,/,例,7.6-1,class coord,int x,y;,public:,coord(int i=0,int j=0);,void print();,coord operator+();,;,coord:coord(int i,int j)x=i;y=j;,void coord:print()coutx:x,y:y,”,只能作为成员函数,;,对于运算符,“,+=,、,-=,、,/=,、*,=,、,&=,、,!=,、,=,、,%=,、,=,”,建议重载为成员函数,;,对于其他运算符,建议重载为友元函数。,(10),双目运算符一般可以被重载为友元运算符重载函数或成员运算符重载函数,,但有一种情况,必须使用友元函数。,#include /,例,7.7-1,class AB,int a,b;,public:,AB(int m=0,int n=0);,AB operator+(int x);,/,声明成员运算符函数,void show();,;,AB:AB(int x,int y)a=x;b=y;,AB AB:operator+(int x),/,定义成员运算符函数,AB temp;,temp.a=a+x;temp.b=b+x;,return temp;,void AB:show()couta=a b=bn;,main(),AB ob1(30,40),ob2,ob3;,ob2=ob1+30;,ob2.show();,ob3=50+ob1;,ob3.show();,return 0;,注意:,x,是整数,当前对象,.a+,整数,x,当前对象,.b+,整数,x,当前对象,+,整数,30,整数,50+,当前对象,#include /,例,7.7-1,class AB,int a,b;,public:,AB(int m=0,int n=0);,AB operator+(int x);,/,声明成员运算符函数,void show();,;,AB:AB(int x,int y)a=x;b=y;,AB AB:operator+(int x),/,定义成员运算符函数,AB temp;,temp.a=a+x;temp.b=b+x;,return temp;,void AB:show()couta=a b=bn;,main(),AB ob1(30,40),ob2,ob3;,ob2=ob1+30;,ob2.show();,ob3=50+ob1;,ob3.show();,return 0;,注意:,x,是整数,当前对象,.a+,整数,x,当前对象,.b+,整数,x,正确:,运行结果,:a=60 b=70,运行出错,!,程序运行结果表明:,语句,ob2=ob1+30;,正确,运行结果,:a=60 b=70,ob2=ob1.operator+(30);,可以正确调用成员运算符函数:,AB operator+(int x),把整数,30,加到了对象,ob1,的某些元素上去。,语句,ob3=50+ob1;,错误,错误的原因是运算符,“,+,”,的左操作数是一个整数,50:,ob3=50.operator+(ob1);,整数,50,不能调用成员运算符函数。,左操作数是当前对象,ob1,解决方法:,用,两个,友元运算符函数来重载运算符,“,+,”,就能使基本数据类型出现在运算符的左、,右,边,。,friend AB operator+(AB ob,int x);,friend AB operator+(int x,AB ob);,整型变量,x,出现在运算符的左边,整型变量,x,出现在运算符的右边,#include /,例,7.7-2,class AB,int a,b;,public:,AB(int x=0,int y=0);,friend AB operator+(AB ob,int x);,friend AB operator+(int x,AB ob);,void show();,;,AB:AB(int x,int y)a=x;b=y;,AB operator+(AB ob,int x,),AB temp;,temp.a=ob.a+x;temp.b=ob.b+x;return temp;,AB operator+(int x,AB ob),AB temp;,temp.a=x+ob.a;temp.b=x+ob.b;return temp;,void AB:show(),couta=a b=bn;,编写两个友元运算符函数,对象,+,整数,整数,+,对象,main(),AB ob1(30,40),ob2;,ob2=ob1+30;,ob2.show();,ob2=50+ob1;,ob2.show();,return 0;,整数,+,对象,对象,+,整数,运行结果如下:,a=60 b=70,a=80 b=90,7.3,几个常用运算符的重载,7.3.1,单目运算符,“,+,”,和,“,-,”,的重载,7.3.2,赋值运算符,“,=,”,的重载,7.3.3,下标运算符,“,”,的重载,7.3.4,函数调用运算符,“,(),”,的重载,本节主要内容,7.3.1,单目运算符,“,+,”,和,“,-,”,的重载,1.,成员运算符函数为:,ob.operator+(),;,2.,友元运算符函数为,:,operator+(X,/ob,为类,X,对象的引用,1.,成员运算符函数为:,ob.operator+(int),;,2.,友元运算符函数为,:,operator+(X&ob,,,int),;,参数表中没有参数,传址调用,增加一个参数,int,,,表示与,后缀,方式,对于,前缀方式,+ob,对于,后缀方式,ob+,参数表中有一个参数,传址调用,调用时,,参数,int,一般被传递给值,0,#include,/,例,7.8-1,class over,int i1;,public:,void init(int I1);,void print();,over operator+();,over operator+(int);,;,void over:init(int I1)i1=I1;,void over:print(),/,显示输出数据成员,couti1:i1endl;,over over:operator+(),/,前缀方式定义,+i1;return*this;,over over:operator+(int),/,后缀方式定义,i1+;return*this;,成员,运算符重载函数,的,前缀,方式和,后缀,方式,成员,运算符重载函数,前缀方式,成员运算符重载函数,后缀方式,main(),over obj1,obj2;,obj1.init(4);obj2.init(2);,obj1.operator+();/,或,+obj1,obj2.operator+(0);/,或,obj2+,obj1.print();obj2.print();,return 0;,运行结果如下:,i1:5,i1:3,显式调用,前缀方式,显式调用,后缀方式,#include,/,例,7.9-1,class over,int i1;,public:,void init(int I1);,void print();,friend over operator-(over,friend over operator-(over,;,void over:init(int I1)i1=I1;,void over:print(),/,显示输出数据成员,couti1:i1endl;,over operator-(over&op),/,前缀方式定义,-op.i1;return op;,over operator-(over&op,int),/,后缀方式定义,op.i1-;return op;,友元,运算符重载函数,的,前缀,方式和,后缀,方式,友元,运算符重载,函数,前缀方式,友元运算符重载函数,,后缀,方式,main(),over obj3,obj4;,obj3.init(8);obj4.init(3);,operator-(obj3);,/,或,-obj3,operator-(obj4,0);/,或,obj4-,obj3.print();obj4.print();,return 0;,运行结果如下:,i1:7,i1:2,显式调用,前缀方式,显式调用,后缀方式,7.3.2,赋值运算符,=,的重载,若,obj1,和,obj2,是类,X,的两个对象,则对象间可以进行赋值:,obj1=obj2,;,原因是:,对任一,类,X,,如果没有用户自定义的赋值运算符函数,那么系统,自动地,为其生成一个,默认,的赋值运算符函数。,例如:定义为类,X,中的,成员到成员的赋值,X&Xoperator=(const X&source),/,成员间赋值,赋值运算符函数,若,obj1,和,obj2,是类,X,的两个对象,则编译程序遇到如下语句:,obj1=obj2,;,调用,默认的赋值运算符函数,,,将对象,obj2,的数据内容逐域拷贝到对象,obj1,中。,1.,指针悬挂问题,注意:,在某些特殊情况下,如类中有指针类型时,使用默认的赋值运算符函数会产生错误。,请看下面的例子:,#include,/,例,7.10,using namespace std;,class STRING,public:,STRING(char*s),coutConstructor called.endl;,ptr=new charstrlen(s)+1;,strcpy(ptr,s);,STRING(),coutDestructor called.-ptrendl;,delete ptr;,private:,char*ptr;,;,int main(),STRING p1(book);,STRING p2(jeep);,p2=p1;,return 0;,调用默认的赋值运算符函数,浅层复制,运行结果:,Constructor called.,Constructor called.,Destructor called.-book,Destructor called.-,葺葺葺葺,VC+,错误信息,执行到右花括号,,先撤消对象,p2,,后撤消对象,p1,动态空间,1,动态空间,2,book,jeep,ptr,p1,ptr,p2,(a,),执行,p2=p1,之前,book,ptr,ptr,p1,p2,(b),执行,p2=p1,之后,jeep,ptr,?,(c),撤销对象,p2,后,图,5.1,例,5.10,的浅层复制示意图,p1,Lin,调用了,默认的,赋值运算符函数,程序运行后,出现了所谓的,“,指针悬挂,”,现象。,2.,用深层复制解决指针悬挂问题,为了解决浅层复制出现的错误,必须,显式地定义一个,赋值运算符重载函数,使之不但拷贝数据成员,而且,为对象,p1,和,p2,分配了各自的内存空间,这就是所谓的,深层复制,。,#include,/,例,7.11,关于深层复制的例子。,using namespace std;,class STRING,public:,STRING(char*s),coutConstructor called.endl;,ptr=new charstrlen(s)+1;strcpy(ptr,s);,STRING(),coutDestructor called.-ptrendl;deleteptr;,STRING,private:,char*ptr;,;,STRING&STRING:operator=(const STRING&s),if(this=/,防止,s=s,的赋值,delete ptr;/,释放掉原区域,ptr=new charstrlen(s.ptr)+1;/,分配新区域,strcpy(ptr,s.ptr);/,字符串拷贝,return*this;,声明赋值运算符重载函数,定义赋值运算符函数,int main(),STRING p1(book);,STRING p2(jeep);,p2=p1;,return 0;,调用自定义赋值运算符函数,深层复制,执行到右花括号,先撤消对象,p2,,后撤消对象,p1,运行结果:,Constructor called.,Constructor called.,Destructor called.-book,Destructor called.-book,动态空间,1,动态空间,2,book,jeep,ptr,p1,ptr,p2,(a),执行,p2=p1,之前,book,ptr,ptr,p1,p2,(b),执行,p2=p1,之后,jeep,说明:,类的赋值运算符,“,=,”,只能重载为成员函数,而不能把它重载为友元函数,.,book,ptr,图,5.2,例,5.11,的深层复制示意图,p1,(c),撤销对象,p2,后,可见:调用了,自定义的,赋值运算符函数,程序执行了所谓的深层复制,运行结果是正确的。,在,C+,中,在重载下标运算符,“,”,时,认为它是一个,双目运算符,例如,XY,可以看成:,-,双目运算符,X-,左操作数,Y-,右操作数,operator-,对应的运算符函数名,-,若,X,为某一个类的对象,,函数调用,XY,可被解释为,:,X.,operator,(Y),左操作数 运算符函数名 右操作数,7.3.3,下标运算符,“,”,的重载,类似,X,+,Y,可以看成:,+,-,双目运算符,X,-,左操作数,Y,-,右操作数,operator+,-,运算符函数名,类似,X.operator,+,(Y),下标运算符重载函数形式如下,:,说明,:,(1),下标运算符,“,”,只能使用成员函数重载。,(2),形参只能有一个,形参在此表示下标。,返回类型 类名,:operator(,形参,),/,函数体,#include /,例,7.13-1,#include,class Vector4,int v4;,public:,Vector4(int a1,int a2,int a3,int a4),v0=a1;v1=a2;v2=a3;v3=a4;,int&operator(int bi),;,;,int&Vector4:operator(int bi),if(bi=4),coutBad subscript!n;exit(1);,return vbi;,void main(),Vector4 v(1,2,3,4);,coutv2;,coutendl;,v2=22;,coutrow=row;this-col=col;,m=new introw*col;,for(int i=0;irow*col;i+),*(m+i)=i;,int&Matrix:operator()(int r,int c),return,(*(m+r*col+c);,main(),Matrix aM(10,10);/,生成一个矩阵对象,aM,cout,aM(2,3);,/,输出矩阵中位于第,2,行第,3,列的元素值,aM(2,3),=,24;/,改变矩阵中位于第,2,行第,3,列的元素值,coutendl,aM(2,3);,return 0;,当前对象的,row,形参,row,矩阵元素赋初值,0 1 2 3.,返回矩阵中第,r,行第,c,列的值,等价于:,coutaM.operator()(2,3),运行结果:,23,24,例,7.15,带有多个参数的函数调用运算符,“,(),”,重载函数。,#include,using namespace std;,class Myclass,public:,Myclass(int x=0,double y=0)i=x;j=y;,Myclass operator()(int k,double m);,void display()couti jn;,private:,int i;double j;,;,Myclass Myclass:operator()(int k,double m),i=k+10;j=m+10.5;return*this;,int main(),Myclass obj1(10,11.5);,obj1.display();,obj1(100,6.9);,obj1.display();,return 0;,此语句可解释为,obj1.operator()(100,6.9),声明重载运算符,(),函数原型,定义重载运算符,(),函数,程序运行结果为,:,10 11.5,110 17.4,说明:,“,(),”,是唯一的一个可带多个右操作数的运算符函数。,7.4,重载插入运算符和提取运算符,7.4.1,重载插入运算符,“,”,本节主要内容,7.4.1,重载插入运算符,“,”,在头文件,iostream,中,对运算符,“,”,进行重载,能用它输出各种标准类型的数据,其原型具有形式,:,例如当系统执行,coutThis is a string.n;,时,就调用了,插入,运算符重载函数,ostream&operator(ostream&,char*,);,以上语句相当于,cout.operator(This is a string.n);,ostream&operator(ostream&,类型名,);,它的功能是将字符串,“,This is a string.,”,插入到流对象,cout,中。于是在显示器屏幕上显示出字符串,This is a string.,。,类型名是指,int,、,float,、,double,、,char*,、,char,等,C+,标准类型。,C+,对插入运算符,“,”,的功能进行了扩充,可以实现用户自定义类型的输出。,定义插入运算符,“,”,重载函数的一般格式如下,:,函数中第一个参数是对,ostream,对象的引用,这意味着,out,必须是输出流,它可以是其他标识符,但必须与,return,后面的标识符相同。,ostream&,operator(,ostream,&,out,自定义类名,&obj),outobj.item1;,outobj.item2;,outobj.itemn;,return,out,;,两者应该一致,对,ostream,对象的引用,例,7.16,将运算符函数重载为友元函数,用于进行复数的加法运算,并用重载的运算符,“,”,输出复数。,#include,using namespace std;,class Complex,声明复数类,Complex,public:,Complex(double r=0.0,double i=0.0);/,声明构造函数,friend Complex operator+(Complex,/,声明运算符,+,重载为友元函数,friend ostream,/,声明运算符,重载为友元函数,private:,double real;/,复数实部,double imag;/,复数虚部,;,Complex:Complex(double r,double i)/,定义构造函数,real=r;imag=i;,Complex operator+(Complex&a,Complex&b),Complex temp;/,定义运算符,+,重载函数,temp.real=a.real+b.real;,temp.imag=a.imag+b.imag;,return temp;,ostream&operator(ostream&out,Complex&com),outcom.real;/,定义运算符,“,0)out+;,if(com.imag!=0)outcom.imagin;,return out;,int main(),Complex com1(2.3,4.6),com2(3.6,2.8),com3;,/,定义,3,个复数类对象,coutcom1;/,输出复数,com1,coutcom2;/,输出复数,com2,com3=com1+com2;/,复数相加,cout,”,在头文件,iostream,中,对运算符,“,”,进行重载,以便能用它输入各种标准类型的数据,其原型具有形式,:,例如当系统执行,int x;,cinx;,时,就调用了,提取,运算符重载函数,istream&operator(istream&,int&,);,从,输入流对象,cin,(,通常为键盘,),读入一个值并赋给,x,。,istream&operator(istream&,类型名,其中,类型名也是指,int,、,float,、,double,、,char*,、,char,等,C+,标准类型。,C+,对提取运算符,“展开阅读全文

咨信网声明:本文档由用户上传并分享,仅供学习交流、研究之用,未经授权,严禁复制、发行、汇编、翻译或网络传播等,侵权必究。
咨信网小贴示:
1、浏览或下载可查看了解,请点击【咨信网告知】。
2、下载文件中如有侵权或不适当内容,将立即纠正。
3、如果因为网速或其他原因下载失败请重新下载,重复下载[60天内]不扣币。
4、开具发票登录电脑端申请,请点击【索取发票】。
咨信网客服组:【微信客服】
1、浏览或下载可查看了解,请点击【咨信网告知】。
2、下载文件中如有侵权或不适当内容,将立即纠正。
3、如果因为网速或其他原因下载失败请重新下载,重复下载[60天内]不扣币。
4、开具发票登录电脑端申请,请点击【索取发票】。
咨信网客服组:【微信客服】


运算符重载.ppt
















自信AI助手














微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/14623043.html