- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
类重用的方式之一组合
类重用的方式之一——组合 部件组装的思想背景 组合类与成员对象间的“has-a”关系 组合类对象的构造与析构 组合类的概念 类中的成员数据是另一个类的对象。 描述的是一种包含与被包含的关系。 举例 组合类的构造函数设计 原则:不仅要负责对本类中的基本类型成员数据赋初值,也要对对象成员初始化。 定义形式 类名::类名(形参表) : 内嵌对象1(参数),内嵌对象2(参数), ...... { 本类初始化 } 组合类的构造函数调用 构造函数调用顺序: 先调用内嵌对象的构造函数(按内嵌时的声明顺序,先声明者先构造)。然后调用本类的构造函数。(注:析构函数的调用顺序相反) 若调用默认构造函数(即无形参的),则内嵌对象的初始化也将调用相应的默认构造函数。 组合类的拷贝构造函数 如果没有编写拷贝构造函数,编译系统生成一个默认的拷贝构造函数。在调用组合类的默认的拷贝构造函数时,编译系统自动调用内嵌对象的拷贝构造函数。 编写组合类的拷贝构造函数,需要为内嵌对象的拷贝构造函数传递参数。 例如: C::C(C c1):b(c1.b){…} 思考: 设计并测试一个名为Rectangle的矩形类,其属性为矩形的左下角与右上角两个点的坐标,能计算矩形的面积。 前向引用声明 类应该先声明,后使用。 如果需要在某个类的声明之前,引用该类,则应进行前向引用声明。 前向引用声明只为程序引入一个标识符,但具体声明在其它地方。 前向引用声明注意事项 尽管使用了前向引用声明,但是在提供一个完整的类定义之前,不能定义该类的对象,也不能在内联成员函数中使用该类的对象。 前向引用声明注意事项 * * input output CPU Memory is_a 和 has_a 的区别。(属于和包含) class Point { private: float x, y; //点的坐标 public: Point(float h, float v); //构造函数 Point(Point p); //拷贝构造函数 float GetX(); //取X坐标 float GetY(); //取Y坐标 }; //...函数的实现略 class Line { private: Point p1, p2; //线段的两个端点 double len; public: Line(Point a, Point b); //构造函数 Line(Line l); double GetLen() //求线段的长度 }; //...函数的实现略 内嵌对象 //组合类的构造函数 Line:: Line (Point xp1, Point xp2) :p1(xp1),p2(xp2) { coutLine构造函数被调用endl; double x=double(p1.GetX()-p2.GetX()); double y=double(p1.GetY()-p2.GetY()); len=sqrt(x*x+y*y); } //组合类的拷贝构造函数 Line:: Line (Line l): p1(l.p1), p2(l.p2) { coutLine拷贝构造函数被调用endl; len=l.len; } class Point { public: Point(int xx=0, int yy=0) {X=xx;Y=yy;} Point(Point p); int GetX() {return X;} int GetY() {return Y;} private: int X,Y; }; Point::Point(Point p) { X=p.X; Y=p.Y; coutPoint拷贝构造函数被调用endl; } class Line { public: Line (Point xp1, Point xp2); Line (Line l); double GetLen(){return len;} private: Point p1,p2; double len; }; Line:: Line (Point xp1, Point xp2):p1(xp1),p2(xp2) { coutLine构造函数被调用endl; double x=double(p1.GetX()-p2.GetX()); double y=double(p1.GetY()-p2.Get
您可能关注的文档
最近下载
- SY∕T 5367-2023 石油可采储量估算方法.xdf.pdf
- 内审及管理评审基础知识和流程培训.pptx VIP
- 2025年深圳市普通高中高二年级调研考试英语含答案.pdf VIP
- 220kV双回输电线路钻越500kV高电压线路方法.pdf VIP
- 医院抗菌药物临床应用培训.pptx VIP
- 2026年日历全年打印一张纸大字体横向排版带农历带节假日可编辑.xlsx
- 2026-2030中国氢能装备行业发展形势与前景规划分析研究报告.docx
- 国家开放大学(电大)《营销管理》1-11章单元自测答案.pdf
- 24CJ113-1 金属板建筑构造(一)—360°夹胶直立锁缝金属屋面系统.docx
- WST 406—2024临床血液检验常用项目分析质量标准.pdf VIP
原创力文档


文档评论(0)