欢迎来到天天文库
浏览记录
ID:41738389
大小:63.78 KB
页数:6页
时间:2019-08-31
《实验六静态成员与友元》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验六静态成员与友元姓名:王永杰10电子学号:1014860069【实验冃的】1.掌握友元函数的定义、使用方法以及特点。2.握静态成员函数和静态数据成员的功能。【实验内容】1.调试下列程序,写出输出结果,并分析输出结果。#includeHiostream.hMclassMy{public:My(intaa){A=aa;B-=aa;}staticvoidfun(Mym);private:intA;staticintB;};voidMy::fun(Mym){cout«MA=H«m.A«endl;cout<2、=100;intmain(){MyP(6),Q⑻;My::fun(P);Q.fun(Q);return0;运行结果A=6B=86A=8B=86Pressanykeytocontinue分析:i・i挣态数据成员属于类,普通数据成员属于某一对彖1.在类中不给静态数据成员分配内存空间;2.静态数据成员与静态变量一样,是在编译时创建并初始化,它在该类的任何対象被建立Z前就存在;3.静态数据成员不能在类中进行初始化,必须在类外的其他地方为它捉供定义;一般在main()开始Z前、类的声明Z后的特殊地带为它提供定义和初始化;4.私冇静态数据成员不能被类外部函3、数访问,也不能用对象进行访问。2.设计一个含有静态成员、静态成员函数的程序,分析程序结果,理解静态成员(函数)与类和对象的关系。参考程序:#includeclassA{friendclassB;〃友元类的声明public:voidSet(inti){x=i;)friendintadd(A&fl);//友元函数的声明voidDisplayO{cout«,,x=,,«x«,,,y=n«y«endl;}private:intx;staticinty;};intadd(A&fl){returnfl.x+1;}classB{pub4、lic:B(inti,intj);voidDisplayO;private:Aa;//A类的对象a作为类B的私冇成员};intA::y=1;〃静态成员必须先赋初值B::B(inti,intj)a.x=i;A::y=j;voidB::Display(){cout«'lx=',«a.x«,y=H«A::y«endl;}voidmain(){Ab;a.Set(5);//友元函数的调用cout«add(b)«endl;b.DisplayO;Bc(6,9);//a.x=6,X::y=9;c.Display();b.DisplayO;}结果—■■-ja」5、a问题:(l)分析友元函数add()的定义、调用与成员函数的区别。友元函数ndd()的定义:能够访问类A的私有成员但又不是该类成员函数的函数。友元函数通过访问类A的私冇成员X与Y并将其值输出,但友元函数并不是该类的成员函数:而成员函数本身属于该类的成员函数,一个类的成员函数町作为另一个类的友元函数。⑵、分析友元类B的成员函数如何引用类A的私有成员的?友元函数的特点是能够访问类屮的私有成员的非成员函数。通过声明一类A的友元函数friendintadd(A&fl);,就可以用这个函数白接访问类A的私有成员了。⑶、根据运行结果分析下列程序中静态成员B6、值的变化和静态成员函数的引用方式。#includcclassM{public:M(inta){A=a;B+=a;}staticvoidfl(Mm);〃静态公有成员函数声明private:intA;staticintB;〃静态私有成员};intM::B=O;voidm)〃在静态成员函数中对不同类型成员的引用方式{coutvv"A二”vvm.Avvendl;//引用类的非静态成员,用点域法coutvv“B=”vvBvveixll;〃引用类的静态成员,直接引用}voidmain(){MP(5),Q(10);}[Milyiuua7、i8、main▼9、•灼■;=4KJM::fl(P);//调用静态成员函数国I”E:VISUALC++6・0SP6简体中文版COMMONMSDEV983E永杰Debug3E永杰.exe”A=5DB=15fi=10B=15■Pressanykeytocontinue1#includeclassM1.分析并调试程序,完成下列问题。#includeniostream.hH#inckidc"cmath.h"classMy{public:My(doublei=0){x=y=i;}My(doublci,doublej){x=10、i;y=j;}My(My&m){x=m.x;y=m.y;}frienddoubledist(My&a,My&b);private:doublex,y;
2、=100;intmain(){MyP(6),Q⑻;My::fun(P);Q.fun(Q);return0;运行结果A=6B=86A=8B=86Pressanykeytocontinue分析:i・i挣态数据成员属于类,普通数据成员属于某一对彖1.在类中不给静态数据成员分配内存空间;2.静态数据成员与静态变量一样,是在编译时创建并初始化,它在该类的任何対象被建立Z前就存在;3.静态数据成员不能在类中进行初始化,必须在类外的其他地方为它捉供定义;一般在main()开始Z前、类的声明Z后的特殊地带为它提供定义和初始化;4.私冇静态数据成员不能被类外部函
3、数访问,也不能用对象进行访问。2.设计一个含有静态成员、静态成员函数的程序,分析程序结果,理解静态成员(函数)与类和对象的关系。参考程序:#includeclassA{friendclassB;〃友元类的声明public:voidSet(inti){x=i;)friendintadd(A&fl);//友元函数的声明voidDisplayO{cout«,,x=,,«x«,,,y=n«y«endl;}private:intx;staticinty;};intadd(A&fl){returnfl.x+1;}classB{pub
4、lic:B(inti,intj);voidDisplayO;private:Aa;//A类的对象a作为类B的私冇成员};intA::y=1;〃静态成员必须先赋初值B::B(inti,intj)a.x=i;A::y=j;voidB::Display(){cout«'lx=',«a.x«,y=H«A::y«endl;}voidmain(){Ab;a.Set(5);//友元函数的调用cout«add(b)«endl;b.DisplayO;Bc(6,9);//a.x=6,X::y=9;c.Display();b.DisplayO;}结果—■■-ja」
5、a问题:(l)分析友元函数add()的定义、调用与成员函数的区别。友元函数ndd()的定义:能够访问类A的私有成员但又不是该类成员函数的函数。友元函数通过访问类A的私冇成员X与Y并将其值输出,但友元函数并不是该类的成员函数:而成员函数本身属于该类的成员函数,一个类的成员函数町作为另一个类的友元函数。⑵、分析友元类B的成员函数如何引用类A的私有成员的?友元函数的特点是能够访问类屮的私有成员的非成员函数。通过声明一类A的友元函数friendintadd(A&fl);,就可以用这个函数白接访问类A的私有成员了。⑶、根据运行结果分析下列程序中静态成员B
6、值的变化和静态成员函数的引用方式。#includcclassM{public:M(inta){A=a;B+=a;}staticvoidfl(Mm);〃静态公有成员函数声明private:intA;staticintB;〃静态私有成员};intM::B=O;voidm)〃在静态成员函数中对不同类型成员的引用方式{coutvv"A二”vvm.Avvendl;//引用类的非静态成员,用点域法coutvv“B=”vvBvveixll;〃引用类的静态成员,直接引用}voidmain(){MP(5),Q(10);}[Milyiuua
7、i
8、main▼
9、•灼■;=4KJM::fl(P);//调用静态成员函数国I”E:VISUALC++6・0SP6简体中文版COMMONMSDEV983E永杰Debug3E永杰.exe”A=5DB=15fi=10B=15■Pressanykeytocontinue1#includeclassM1.分析并调试程序,完成下列问题。#includeniostream.hH#inckidc"cmath.h"classMy{public:My(doublei=0){x=y=i;}My(doublci,doublej){x=
10、i;y=j;}My(My&m){x=m.x;y=m.y;}frienddoubledist(My&a,My&b);private:doublex,y;
此文档下载收益归作者所有