面向对象技术与工具第08章.ppt

  1. 1、本文档共101页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
8.10 友元关系 8.10.3 友元关系的总结 友元具有如下的特性: 非传递性。即A是B的友元,B是C的友元,但A不一定是C的友元(除非将A声明 为C的友元); 非对称性。即A是B的友元,但B不一定是A的友元(除非将B声明为A的友元)。 * 8.11 与类和对象相关的问题 8.11.1 类类型做参数类型 由于类是一个数据类型,也可以将对象作为参数传递给函数 参数传递遵循传值(或传地址)的方式,这同所有其他的数据类型是相同的。 类类型做形参类型,一般有3种方式: 对象本身做参数(传值) 对象引用做参数(传地址) 对象指针做参数(传值) * 8.11 与类和对象相关的问题 class OBJ { int num; public: void set_num(int x) {num=x;} void out_num( ) { coutnum‘ ’;} }; 8.11 与类和对象相关的问题 void fun(OBJ objx) { objx.out_num( ); objx.set_num(100); objx.out_num( ); } void main( ) { OBJ obj; obj.set_num(10); fun(obj); obj.out_num( ); } 结果为 10 100 10 8.11 与类和对象相关的问题 void fun(OBJ objx) { objx.out_num( ); objx.set_num(100); objx.out_num( ); } void main( ) { OBJ obj; obj.set_num(10); fun(obj); obj.out_num( ); } 结果为 10 100 100 8.11 与类和对象相关的问题 void fun(OBJ * objp) { objp-out_num( ); objp- set_num(100); objp- out_num( ); } void main( ) { OBJ obj; obj.set_num(10); fun(obj); obj.out_num( ); } 结果为 10 100 100 8.11 与类和对象相关的问题 8.11.1 类类型做参数类型 对象本身做参数,对形参的任何修改都不影响用作实参的对象; 对象引用做参数,对形参的任何修改就是对实参的对象的修改; 对象指针做参数,对它指向的对象作任何修改就是对实参对象的修改。 * 8.11 与类和对象相关的问题 8.11 与类和对象相关的问题 8.11.2 一个类的对象作为另一个类的成员 一个类的对象可以作为另一个类的数据成员,简称为对象作为成员,实现的是整体和部分之间的关系(a part of),即对象的包含关系,有时也称为类之间的“复合”(composition)。 可以通过 外部对象名.内部对象名.内部对象公有成员 的方式来直接访问内部对象的公有成员。 * 8.11 与类和对象相关的问题 8.11.2 一个类的对象作为另一个类的成员 一个复合类在构造的时候,首先调用的是内部类对象的构造函数。 如果内部类对象多于一个,则它们的构造函数的调用顺序依照它们的定义顺序。 此后,再调用外部类的构造函数。 而在复合类对象析构的时候,析构函数的调用顺序正好与构造是相反。 * 8.11 与类和对象相关的问题 考虑点和圆的关系。圆的属性包括圆心和半径,而圆心就是一个点。 class Point { int x, y; public: Point(int x1,int y1) { x=x1; y=y1 ; } void setxy(…); …}; 8.11 与类和对象相关的问题 class Circle { float r; Point circle_point; public: Circle(float r1,int a,int b) :circle_point(a,b) {r=r1;} void set_point(…) { circle_point.setxy(…);} … }; void main() {Circle cobj(5.6,1,2);cobj. set_point(…);…} 8.11 与类和对象相关

文档评论(0)

yuguanyin2015 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档