初学C基础知识要点.ppt_第1页
初学C基础知识要点.ppt_第2页
初学C基础知识要点.ppt_第3页
初学C基础知识要点.ppt_第4页
初学C基础知识要点.ppt_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C+程序设计,主讲:李晓勇Email:lxyonghnTelphone一、友元,1、引入理由安全性-封装:类的成员函数才能访问类的私有成员,其他函数不能访问私有成员的。高效率-非封装:(1)将数据定义成公有成员-破坏隐藏性(2)友元函数-提高效率,破坏隐藏性,2、友元特点,(1)在类中用friend说明。位置任意,含义相同。(2)友元分:例1,在平面上计算两个点之间的距离。假设第一个点(x1,y1),第二个点(x2,y2)-普通函数作友元函数,classpoint/点的类public:point(doublexx,doubleyy)x=xx;y=yy;voidprint_xy()cout(x,y)endl;frienddoubledistance(point,doubledistance(point,classB;/说明classApublic:voiddisp(Bvb);protected:intx;classBpublic:B(intm)y=m;voidfriendA:disp(Bvb)coutvb.y=vb.yendl;protected:inty;,例2,其他类的成员函数作友元函数:,voidmain()Aa1;Bb1(100);a1.disp(b1);/通过a1的成员函数/调用b1的数据成员/运行结果:vb.y=100,例3,普通函数成为两个类的友员,classBoat;classCarpublic:Car(intj)size=j;friendintleisure(inttime,Car,classBoatpublic:Boat(intj)size=j;friendintleisure(inttime,Car,voidmain()Carc1(2);Boatb1(3);inttime=4;coutleisure(time,c1,b1);,结论:,友元函数可以是一个普通的函数,也可以是其他类的成员函数,它不是本类的成员函数。在友元函数中可以通过对象名访问类的私有和保护成员。,例4,类作为友元:,classy;classxfriendclassy;/类作为友元。说明位置任意public:voidset(inti)m=i;voidset(yy1);private:intm;classypublic:voiddisp(xp)coutp.m=p.m4+5函数的语义可以重新定义。重新定义的运算符又称运算符函数。2、目的:使C+代码更直观、更易读。,3、哪些运算符可以重载?,可以重载:算术运算符:+,-,*,/,%,+,-位操作运算符:doubleimage;c1,c2,c3;c3.real=c1.real+c2.real;/设c1、c2已知c3.image=c1.image+c2.image;或者,cal(c1,c2,c3)-函数方式实现,用类、运算符重载方式实现,classcomplexpublic:complex()real=image=0;complex(doubler,doublei)/构造函数real=r;image=i;complexoperator+(constcomplex,/函数的返回值必须是complexcomplexcomplex:operator+(constcomplex,voidmain()complexc1(2.0,4.0),c2(4.0,-2.0),c3;c3=c1+c2;/对象赋值print(c3);/输出运行结果:6+2i说明:(1)函数的参数可以不用const,也可以不用引用。(2)复数的减法、乘法、除法定义相似。,差别?,例2,用友元方式实现重载,classcomplexpublic:complex()real=image=0;complex(doubler,doublei)real=r;image=i;friendcomplexoperator+(constcomplex,运算值类型,/友元函数的定义complexoperator+(constcomplex,voidprint(complex,voidmain()complexc1(2.0,3.0),c2(4.0,-2.0),c3;c3=c1+c2;/对象赋值print(c3);print(complex(2,4)+complex(1,2);/两个常复数对象相加说明:(1)函数的参数可以不用const,也可以不用引用。(2)复数的减法、乘法、除法定义相似。,练习5.1:平面点重载+、运算符,在主函数中测试。,例3、前缀+,后缀+,()的重载,classcounterpublic:counter()value=0;counteroperator+();/前缀加重载counteroperator+(int);/后缀加重载counteroperator()();/圆括号重载voidprint()coutvaluevalue/类型不同returnthis/指针,类型不同(4)如没有前缀运算符重载,则前缀、后缀一样。,3、类的转换运算符,对于基本类型的数据具有强制类型转换运算;对于类的必须自己定义强制类型转换运算符。例,将RMB类的对象转换成double的强制运算符定义classRMBpublic:RMB(doublevalue=0.0);operatordouble()return(yuan+jf/100.0);/转换运算符voiddisplay()coutvalue=(yuan+jf/100.0)endl;protected:unsignedintyuan;unsignedintjf;,RMB:RMB(doublevalue)/将double转换成类的对象yuan=value;jf=(value-yuan)*100+0.5;/四舍五入voidmain()RMBd1(2.0),d2(1.5),d3;doublev1,v2;v1=(double)d1;v2=(double)d2;d3=RMB(v1+v2);/显式转换d3.display();,练习5.3:定义一个日期类,它有年、月、日三个属性值,重载整型强制类型转化运算符,在主函数中测试。,小结:,(1)使用运算符重载可以使程序易于对对象的操作。许多C+的运算符都可以重载,但注意不要重载违反常规的运算符。(2)重载不能改变运算符的操作数的个数;也不能发明新的运算符。(3)this指针指向当前的对象,是所有成员函数不可见的参数,通过它可以返回对象的值。(4)在前增量、后增量运算符重载中,使用int形参只是为了标志前后有别,没有其他作用。,四、静态成员静态数据成员提出理由:数据共享:比较全局变量安全性:静态变量/静态函数等例:用链表管理学生信息链首指针学生信息数(结点数目),例1:使用静态数据成员的简单程序,classMyclasspublic:Myclass(intx,inty)a=x;b=y;voidget_num()sum+=a+b;voidprint_sum()coutsum=sumpnext=pnext;return;/断开this结点,即删除该点voidstudent:print()/打印链的内容student*p=pfirst;while(p)coutnamepnext;,student*fn()/普通函数,建立两个结点的链student*ps=newstudent(A1);studentsb(“B1);returnps;voidmain()studentsa(“C1);student*sb=fn();studentsc(“D1);sc.print();coutendl;deletesb;/释放sb对象,程序运行结果:,B1D1-A1-C1-A1D1C1,结论:,(1)静态私有数据成员:只能被静态成员函数操作,不能直接通过对象名或其他方式访问。(2)静态公有数据成员:可以被静态成员函数操作;可以通过对象名或类的作用域方式直接访问;(3)两种静态数据的初始化形式一

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论