- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第4章 类和对象(二)-2
4.5 友 元 引入友元的原因:当需要在类外访问私有成员时,需要一种途径,在不放弃私有成员数据安全性的情况下,使得类外可以访问私有成员。 作用:友元提供了不同类的成员函数之间、类的成员函数与一般函数之间进行数据共享的机制。即通过友元,一个普通函数或类的成员函数可以访问封装于某一个类中的数据,这就相当于给类的封装挖了一个小小的孔,把数据的隐蔽掀开了一个小小的角。通过它,可以看到类内部的一些属性。 主要是用于提高程序运行效率,可方便编程。 友元概念:一个类或一个函数是另一个类的朋友(friend)。 友元的三种形式: 1. 当一个类B是另一个类A的友元时,类称B是类A的友元类,称类A是B的宿主类。 2.当一个函数是一个类的友元时,称该函数是类A的友元函数。 3.当一个类只限定另一个类中的某个或某些成员函数是自己的友元时,也可只定义这些成员函数是自己的友元成员函数。 友元的合理使用:它破坏了类的封装性和面向对象程序设计的信息隐藏的原则 。 4.5.1 友元函数 友元函数不是当前类的成员函数,而是独立于当前类的外部函数,但它可以访问该类的所有对象的成员,包括私有成员、保护成员和公有成员。 在类中声明格式: 在函数原型前加“friend ” 说明: 1.友元函数在类内类外都可以定义,但在类外定义时,不必像成员函数那样加类名:: 2.友元函数一般带有一个类的入口参数,因为它是外部函数,对类中成员访问时无this指针,所以它不能直接引用对象成员的名字,需要通过入口参数传递过来的对象名或对象指针引用该对象的成员。 3.声明友元的语句可以在类中任何一个访问权限下 4.5.2 友元成员函数 一个类的成员函数也可以作为另一个类的友元,这种成员函数不仅可以访问自己所在类对象中的所有成员,还可以访问friend声明语句所在类对象中的所有成员。 作用:能使两个类相互合作、协调工作,完成某一任务。 说明: 1.一个类的成员函数是另一个类的友元函数时,必须先定义这个类。 2.“Class 类名;”为向前引用。 4.5.3 友元类 一个类也可以作为另一个类的友元。 例如: class Y { //… }; class X { //… friend Y; // 声明类Y为类X的友元类 //… }; 说明: 1.友元类可以放在类定义的任意位置,他不受类的存取权限的影响 。 2.一旦定义了,则友元类的所有的成员函数均可用“.”运算符调用宿主类 A的私有成员 3.定义时的语句次序必须正确,先定义友元类,再定义宿主类,反之则不行。 不能在友元类中自己定义自己是宿主类的友元类。 4.友元类和宿主类之间不具有相互性,例如,如果定义了A是B的友元类,则B不是A的友元类; 5.友元类不能传递 6.友元类不能继承 4.6 对象成员 如果一个类的对象是另一个类的数据成员,则称这样的数据成员为对象成员。例如: class A { //... }; class B { A a; //类A的对象a为类B的对象成员 public: //… }; 一、类嵌套和子对象 类嵌套:用其它类的对象作为一个类的数据成员。 外层类:包含对象数据成员所属的类。 内层类:对象数据成员所属的类。 子对象:外层类包含的内层类的对象。 注意:由于系统无法自动调用内层类的构造函数为外层类对象中的子对象赋初值,因此需要在设计外层类的构造函数时,显式调用内层类的构造函数,为外层类对象中的子对象赋初值。 二、外层类的构造函数 类X的构造函数的定义形式为: X::X(形参表):对象成员名1(形参表1),…, 对象成员名i(形参表i) ,…,对象成员名n(形参表n) { // …构造函数体 } 两种方法: 以基本数据类型的形式变量参数为子对象初始化赋值; 内层对象类的形式对象参数为子对象初始化赋值。 #include iostream.h class point { private: int x,y; public: point(int xx,int yy) { x=xx; y=yy; cout”point constructing”endl;} void printp() {
文档评论(0)