- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
首先调用对象成员的构造函数
10:40 * 同名冲突 第一种:派生类与基类有同名成员 课本例5.9 同名覆盖原则:通过派生类内部成员函数或派生类对象访问同名成员,访问的都是派生类中新定义的同名成员。 如果要访问基类的同名成员,则必须在同名成员前面加上“基类名::”进行限定。 10:40 * 同名冲突 第二种:多个直接基类中有同名成员 课本例5.10 解决方案与上一种类似,在成员前指名基类名即可。 10:40 * 同名冲突 第三种:共同祖先基类成员多重拷贝 课本例5.11 Derived类中共有两个成员a,一个经Base---Base1---Derived继承,另一个经Base---Base2---Derived继承。因此在Derived中访问a时会出现同名冲突。 为解决同名冲突,本例采用了变量前加“类名::”的方案。但注意,不能使用共同的祖先基类名,因为无法区别“Base::a”到底是哪一个拷贝。 10:40 * 第三种同名冲突的进一步讨论 class furniture { public: int weight; }; class sofa: public furniture {…}; class bed: public furniture {…}; class sofabed: public sofa, public bed {…}; sofabed ob1; ob1.sofa::weight ob1.bed::weitht 家具 沙发 床 沙发床 家具 10:40 * 虚基类 虚基类的定义 class 派生类名:virtual 继承方式 基类名 { … //函数体 }; 或 class 派生类名:继承方式 virtual 基类名 { … //函数体 }; virtual确保虚基类的构造函数至多被调用一次。 10:40 * 虚基类 课本例5.12 例5.11类关系图 Base2类 Derived类 Base类 Base1类 Base类 例5.12类关系图 Base2类 Derived类 Base类 Base1类 10:40 * 构造函数与析构函数的调用 当创建一个对象时,其完整的构造函数调用次序是: 所有虚基类的构造函数(按定义顺序) 所有直接基类的构造函数(按定义顺序) 所有对象成员的构造函数(按定义顺序) 派生类自己的构造函数 析构函数的调用次序与之完全相反。 10:40 * 赋值兼容规则 赋值兼容就是指需要使用基类的地方可以使用其公有派生类来代替。换言之,公有派生类可以当成基类来使用。 四种场景 基类对象 = 公有派生类对象 指向基类对象的指针 = 公有派生类对象的地址 指向基类对象的指针 = 指向公有派生类对象的指针 基类的引用 = 公有派生类对象,即派生类对象可以初始化基类的引用。 课本例5.13 10:40 * 程序实例——师生信息管理系统 功能扩充 一个学校除了本科生之外,还有研究生以及老师等人员,其管理都应纳入到信息管理系统中。因此,需要设计相应的类来存储这些数据 教师类,应该有姓名、身份证号、工号、年龄、职称等属性。 研究生类,应该有姓名、身份证号、学号、年龄、专业、研究课题等属性。 10:40 * 程序实例——师生信息管理系统 为减少代码开发量,可以把学生类与教师类的共有部分提取出来,再封装成一个新类,称之为Person类。 Person用于存储所有人员的共有信息。学生类、教师类作为Person的公有派生类,而研究生类则作为学生类的直接派生类即可。 另外,教师中可能存在一个特殊的群体:在职攻读研究生的教师。对于这部分人,他们应当既具有研究生的属性,又具有教师的属性,因此我们要定义一个在职研究生类来描述这部分人。 10:40 * 程序实例——师生信息管理系统 例5.14类关系图 Graduate PostgraduateOnJob Person Student Teacher 10:40 * 程序实例——师生信息管理系统 原有代码的改进 将年龄属性改为出生日期,避免每年都要维护数据。出生日期定义为一个Date类。 进一步抽象出一个界面类,在界面类中定义需要处理的相关数据类别,并定义相关的输入、输出和搜索函数。 不再使用静态数据成员来计数 10:40 * 课本例5.14 该程序包括5个文件: example5_14_people.h :用于人员信息相关的类定义 example5_14_people.cpp :用于人员信息相关的类的实现 example5_14_interface.h :用于菜单界面相关的类定义 example5_14_interface.cpp :用于菜单界面相关的类的实现 example5_14_main.cpp :程序入口,用于调用界面类的
您可能关注的文档
最近下载
- 吞咽障碍护理的ppt课件.pptx VIP
- PROTEUS-V8中文版介绍.ppt VIP
- 精准落实语文要素五策略 .pdf VIP
- 《第一单元 100以内数加与减(二)——图书角》教学设计-2024-2025学年二年级上册数学北师大版.docx VIP
- 中枢神经系统感染护理查房.ppt VIP
- 标准图集-20S515-钢筋混凝土及砖砌排水检查井.pdf VIP
- 规范、标准整理:TCSUS 17-2021 古道保护利用规划编制导则--------工程交流群加vx:gqq5616.pdf VIP
- 在2024年全市第四季度“12345”热线不满意工单分析研判会上的主持词.docx VIP
- 云南省重大项目办公室 云南省各地州市2015年重大建设项目.doc VIP
- 评标专家评标流程.pdf VIP
文档评论(0)