实验六 静态成与友元.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验六 静态成员与友元 姓名:王永杰 10电子 学号:1014860069 【实验目的】 掌握友元函数的定义、使用方法以及特点。 握静态成员函数和静态数据成员的功能。 【实验内容】 调试下列程序,写出输出结果,并分析输出结果。 #include iostream.h class My { public: My(int aa) { A=aa; B-=aa; } static void fun(My m); private: int A; static int B; }; void My::fun(My m) { coutA=m.Aendl; coutB=Bendl; } int My::B=100; int main() { My P(6),Q(8); My::fun(P); Q.fun(Q); return 0; } 运行结果: 分析:1. 静态数据成员属于类,普通数据成员属于某一对象 2. 在类中不给静态数据成员分配内存空间; ???????????? 3. 静态数据成员与静态变量一样,是在编译时创建并初始化,它在该类的任何对象被建立之前就存在; ???????????? 4. 静态数据成员不能在类中进行初始化,必须在类外的其他地方为它提供定义;一般在main()开始之前、类的声明之后的特殊地 ???????????????? 带为它提供定义和初始化; ???????????? 5. 私有静态数据成员不能被类外部函数访问,也不能用对象进行访问。 2.设计一个含有静态成员、静态成员函数的程序,分析程序结果,理解静态成员(函数)与类和对象的关系。 参考程序: #includeiostream.h class A { friend class B;//友元类的声明 public: void Set(int i){x=i;} friend int add(A f1);// 友元函数的声明 void Display() { coutx=x,y=yendl; } private: int x; static int y; }; int add(A f1) {return f1.x+1;} class B { public: B(int i,int j); void Display(); private: A a;//A类的对象a作为类B的私有成员 }; int A::y=1;//静态成员必须先赋初值 B::B(int i,int j) { a.x=i; A::y=j; } void B::Display() { coutx=a.x,y=A::yendl; } void main() { A b; b.Set(5);//友元函数的调用 coutadd(b)endl; b.Display(); B c(6,9);//a.x=6,X::y=9; c.Display(); b.Display(); } 结果: 问题: (1)分析友元函数add()的定义、调用与成员函数的区别。 友元函数add()的定义:能够访问类A的私有成员但又不是该类成员函数的函数。 友元函数通过访问类A的私有成员X与Y并将其值输出,但友元函数并不是该类的成员函数;而成员函数本身属于该类的成员函数,一个类的成员函数可作为另一个类的友元函数。 ⑵、分析友元类B的成员函数如何引用类A的私有成员的? 友元函数的特点是能够访问类中的私有成员的非成员函数。通过声明一类A的友元函数friend int add(A f1);,就可以用这个函数直接访问类A的私有成员了。 ⑶、根据运行结果分析下列程序中静态成员B值的变化和静态成员函数的引用方式。 #includeiostream.h class M { public: M(int a){A=a;B+=a;} static void f1(M m);//静态公有成员函数声明 private: int A; static int B;//静态私有成员 }; int M::B=0; void M::f1(M m)//在静态成员函数中对不同类型成员的引用方式 { coutA=m.Aendl;//引用类的非静态成员,用点域法 coutB=Bendl;//引用类的静态成员,直接引用 } void main() { M P(5),Q(10); M::f1(P);//调用静态成员函数 M::f1(Q); } 3.分析并调试程序,完成下列问题。 #include iostream.h #include cmath.h class My { public: M

文档评论(0)

155****8706 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档