欢迎来到天天文库
浏览记录
ID:49254493
大小:122.00 KB
页数:22页
时间:2020-02-03
《静态成员与友员.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第15章类和对象的其他特性15.1静态成员15.2友元15.1.1静态数据成员1.静态数据成员的定义一个类的不同对象,其数据成员的存储空间是相互独立的。15.1静态成员"Cheng"'F'20ab"Zhang"'M'18classPerson{charName[20];//姓名charSex;//性别intAge;//年龄public:…};Persona("Cheng",'F',20),b("Zhang",'M',18);如果将类的一个成员定义成静态型的,则该类的所有对象的该成员共用同一存储空间。classSample{private:inta,b,c;static
2、intd;//定义静态数据成员……}s1,s2,s3;abcs1s2s3abcabcdSample::静态数据成员是属于类的。2.静态数据成员的初始化——必需在类体外进行classSample{private:inta,b,c;staticintd;//定义静态数据成员……}s1,s2,s3;intSample::d=10;//初始化3.静态数据成员的使用例15.1静态数据成员的使用#includeclassSample{intn;staticintsum;//静态成员public:Sample(intx){n=x;}voidadd(){sum
3、+=n;}voiddisp(){cout<<"n="<4、sum=2n=3,sum=5n=5,sum=10sizeof(a):4sizeof(b):4sizeof(c):4必须在类外初始化使用静态成员是为了解决对象之间的数据共享问题。n:2n:3n:5abcSample::sum:10如果将主函数改写为:voidmain(){Samplea(2),b(3),c(5);a.add();b.add();c.add();a.disp();b.disp();c.disp();}此程序的运行结果是:n=2,sum=10n=3,sum=10n=5,sum=1015.1.2静态成员函数静态成员函数属于类,就像静态数据成员属于类一样。(1)5、只能通过类名调用静态成员函数。(2)在静态成员函数中只能访问静态数据成员。例15.2静态成员函数的使用#includeclassSample{inta;staticintb;public:Sample(intx){a=x;b+=x;}staticvoiddisp(Samples)//A{cout<<"a="<6、//D}运行结果如下:a=2,b=15a=3,b=1515.2友元15.2.1友元函数(1)类具有封装性和信息的隐蔽性。(2)只有在类内可以访问私有成员。(3)在类外,只能通过公有函数接口才能访问私有成员。例15.3通过公有函数接口访问私有成员#include#includeclassPoint{intx,y;public:Point(inta=0,intb=0){x=a;y=b;}例15.3(续1)~Point(){}voidShow(){cout<<"Point("<7、returnx;}intGety(){returny;}};doubledistance(Point&p1,Point&p2){//注意:此函数是普通函数参见returnsqrt((p1.Getx()-p2.Getx())*(p1.Getx()-p2.Getx())+(p1.Gety()-p2.Gety())*(p1.Gety()-p2.Gety()));}多次调用公有函数接口访问私有数据成员,这样带来的函数调用时间开销是比较大的。例15.3(续2)voidmain(){Pointp1,p2(1,1);cout<
4、sum=2n=3,sum=5n=5,sum=10sizeof(a):4sizeof(b):4sizeof(c):4必须在类外初始化使用静态成员是为了解决对象之间的数据共享问题。n:2n:3n:5abcSample::sum:10如果将主函数改写为:voidmain(){Samplea(2),b(3),c(5);a.add();b.add();c.add();a.disp();b.disp();c.disp();}此程序的运行结果是:n=2,sum=10n=3,sum=10n=5,sum=1015.1.2静态成员函数静态成员函数属于类,就像静态数据成员属于类一样。(1)
5、只能通过类名调用静态成员函数。(2)在静态成员函数中只能访问静态数据成员。例15.2静态成员函数的使用#includeclassSample{inta;staticintb;public:Sample(intx){a=x;b+=x;}staticvoiddisp(Samples)//A{cout<<"a="<6、//D}运行结果如下:a=2,b=15a=3,b=1515.2友元15.2.1友元函数(1)类具有封装性和信息的隐蔽性。(2)只有在类内可以访问私有成员。(3)在类外,只能通过公有函数接口才能访问私有成员。例15.3通过公有函数接口访问私有成员#include#includeclassPoint{intx,y;public:Point(inta=0,intb=0){x=a;y=b;}例15.3(续1)~Point(){}voidShow(){cout<<"Point("<7、returnx;}intGety(){returny;}};doubledistance(Point&p1,Point&p2){//注意:此函数是普通函数参见returnsqrt((p1.Getx()-p2.Getx())*(p1.Getx()-p2.Getx())+(p1.Gety()-p2.Gety())*(p1.Gety()-p2.Gety()));}多次调用公有函数接口访问私有数据成员,这样带来的函数调用时间开销是比较大的。例15.3(续2)voidmain(){Pointp1,p2(1,1);cout<
6、//D}运行结果如下:a=2,b=15a=3,b=1515.2友元15.2.1友元函数(1)类具有封装性和信息的隐蔽性。(2)只有在类内可以访问私有成员。(3)在类外,只能通过公有函数接口才能访问私有成员。例15.3通过公有函数接口访问私有成员#include#includeclassPoint{intx,y;public:Point(inta=0,intb=0){x=a;y=b;}例15.3(续1)~Point(){}voidShow(){cout<<"Point("<7、returnx;}intGety(){returny;}};doubledistance(Point&p1,Point&p2){//注意:此函数是普通函数参见returnsqrt((p1.Getx()-p2.Getx())*(p1.Getx()-p2.Getx())+(p1.Gety()-p2.Gety())*(p1.Gety()-p2.Gety()));}多次调用公有函数接口访问私有数据成员,这样带来的函数调用时间开销是比较大的。例15.3(续2)voidmain(){Pointp1,p2(1,1);cout<
7、returnx;}intGety(){returny;}};doubledistance(Point&p1,Point&p2){//注意:此函数是普通函数参见returnsqrt((p1.Getx()-p2.Getx())*(p1.Getx()-p2.Getx())+(p1.Gety()-p2.Gety())*(p1.Gety()-p2.Gety()));}多次调用公有函数接口访问私有数据成员,这样带来的函数调用时间开销是比较大的。例15.3(续2)voidmain(){Pointp1,p2(1,1);cout<
此文档下载收益归作者所有