重载与转换.ppt
上传人:天马****23 上传时间:2024-09-11 格式:PPT 页数:23 大小:201KB 金币:10 举报 版权申诉
预览加载中,请您耐心等待几秒...

重载与转换.ppt

重载与转换.ppt

预览

免费试读已结束,剩余 13 页请下载文档后查看

10 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

14.1概述intoperator+(int,int);doubleoperator+(double,double);对于不同类型的加法表达式,系统会自动选择一个合适的重载函数,并将选择对应的重载函数原型。但系统定义的运算符函数是有限的,对于类类型或其他更多类型的变量来说,需要程序员自己去定义相应的运算符重载函数。通过运算符重载,使已有的运算符可以适用于更多的对象。当为类型重载运算符时,为使运算符函数能访问类中声明的私有成员,我们可以将运算符声明为这个类的成员函数,或声明为这个类的友元。下面看一个例子来让大家感受一下这两种方法的不同:【例14.1】#include<iostream.h>classload{private:intmile;intmeter;public:load(){mile=0;meter=0;}load(intm,intn){mile=m;meter=n;}loadoperator+(load&);loadoperator-(load&);voiddisplay();};loadload∷operator+(load&D1){inttemp1=mile+D1.mile;inttemp2=meter+D1.meter;returnload(temp1,temp2);//返回一个新对象}loadload∷operator-(load&D2){inttemp1=mile-D2.mile;inttemp2=meter-D2.meter;returnload(temp1,temp2);}voidload∷display(){cout<<mile<<"miles"<<meter<<"meters"<<endl;}voidmain(){loada(10,20);loadb(15,30);loadc,d;c=a+b;d=b-a;cout<<"a+bis:";c.display();cout<<"b-ais:";d.display()l;}输出结果为:a+bis:25miles50metersb-ais:5miles10meters14.2特殊运算符的重载classsector{inta,b;public:sector(){a=0;b=0;}sector(intvar1,intvar2){a=var1;b=var2;}voidoperator+=(sectorD){a+=D.a;b+=D.b;}voidoperator-=(sectorD){a-=D.a;b-=D.b;}voiddisplay();};voidsector∷display(){cout<<"a="<<a<<"b="<<b<<endl;}voidmain(){sectorA(10,20);sectorB(15,30);A+=B;cout<<"theplusis:";A.display();A-=B;cout<<"thesubis:";A.display();}程序运行结果为:theplusis:a=25b=50thesubis:a=10b=204.2.2重载“=”运算符前面我们学过复制构造函数,假设有两个对象分别是A和B,则下列语句是合法的:A=B;jeepA(B);//jeep为类名因为在执行这两句时,将调用复制构造函数完成对对象成员的赋值。不过如果我们自己设计了这类重载函数,C++编译系统将会依据不同的情况调用不同的函数,我们可以看一个例子。【例14.3】#include<iostream.h>classjeep{intnum,kilo;public:jeep()//构造函数{num=kilo=0;}jeep(intvar1,intvar2)//重载构造函数{num=var1;kilo=var2;}jeep(jeep&tmp)//复制构造函数{cout<<"usingcopyconstructor"<<endl;num=tmp.num;kilo=tmp.kilo;}voidoperator=(jeep&tmp){cout<<"usingoperatoroverloading"<<endl;num=tmp.num;kilo=tmp.kilo;}voiddisplay(){cout<<"num"<<num<<"kilo"<<kilo<<endl;}};voidmain(){jeepA(10,10);jeepB;B=A;A.display();jeepC(A);C.display();}输出