




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2010年10月,重庆理工大学计算机科学与工程学院计算机科学与技术系刘恒洋,共13页第1页,第3章 C+多态性的定义及其应用,重点,1.继承和多态性的概念,2.派生类的定义及其使用,3.派生类的构造和析构,4.多态性在C+中的体现,5.实例系统数据库操作类的设计,2010年10月,重庆理工大学计算机科学与工程学院计算机科学与技术系刘恒洋,共13页第2页,3.1 基类和派生类,3.1.1 基类和派生类的定义,在面向对象的程序设计中,一般有一个类的提供者和多个使用者;在继承机制下,将会有多个类的提供者:一个提供基类实现,另一些在继承层次的生命期中提供派生类,子类的提供者常常需要访问基类的实现。,1. 定义基类,基类的成员代表了: 被所有的派生类型支持的操作集。这包括由派生类类型改写的虚拟操作(虚拟函数)以及在派生类之间共享的非虚拟操作(非虚拟函数); 所有派生类公共的数据成员集。 理解程序3_1.dsw。,类中默认的成员函数是非虚拟函数,在函数原型前面加上关键字virtual,就可以要把一个函数声明为虚拟的,如果函数定义被放在类的外面,则不能再次指定virtual; 如果将虚函数声明赋值为0,则这个函数为纯虚函数;纯虚函数可以只提供声明而不提供定义,它在基类中只是公有接口中的一个占位符,同时它也不希望在程序中调用,而每个派生类都将提供一个实际的定义来完成各自的工作; 包含一个或多个纯虚拟函数的类为抽象基类,如:,class Account_DB public: virtual bool connect(); /声明虚拟函数 virtual bool Account_DB:connect() /错误:关键字virtual只能出现在类定义中 return true; ,2010年10月,重庆理工大学计算机科学与工程学院计算机科学与技术系刘恒洋,共13页第3页,2. 定义派生类,派生类都继承了其基类所有的数据成员和成员函数,派生类只需编写与基类行为不同的或扩展的方面; 理解程序3_2.dsw。,3. 派生类的定义格式和派生方式,派生类定义的一般格式为: class derived_class:access_level base_class; 在不同的派生方式下,派生类对基类成员的访问权限有以下限制: 基类中的private成员,无论以何种方式派生,派生类和类外部中都不可以访问。 基类中的protected成员,无论以何种方式派生,派生类中始终可以访问,但类外部不可访问。 基类中的public成员,在派生类中的访问权限和派生方式相同。,2010年10月,重庆理工大学计算机科学与工程学院计算机科学与技术系刘恒洋,共13页第4页,派生类对象实际上是由基类的非静态数据成员组成的子对象加上派生类自身的非静态数据成员构成; 派生类中继承得到的基类子对象的非私有成员(数据成员或成员函数)可以被直接访问,就好像它们是派生类自己的成员一样; 当基类成员在派生类中被重写时,如果需要访问基类成员,就必须通过域限定符来实现,理解程序3.3.cpp; 派生类不能访问另一个独立的基类对象的protected成员,理解程序3.4.cpp; 理解程序3.5.cpp;在C+中,基类指针只能访问在该基类中被声明(或继承)的数据成员和成员函数,包括虚拟成员函数,与它可能指向的实际对象无关;把一个成员函数声明为虚拟的,只推延了“在程序执行期间根据pdb指向的实际类类型对于要调用的实例的解析过程”; 如果基类中定义了静态成员,则派生类对象中不会创建单独的静态成员实例,可以通过基类名+域作用符来访问该静态成员。,3.1.1 基类和派生类成员的定义及访问,2010年10月,重庆理工大学计算机科学与工程学院计算机科学与技术系刘恒洋,共13页第5页,3.2 基类和派生类的构造和析构,理解并完成程序3.6.cpp; 利用构造函数构造派生类对象时需要注意以下几点: 为了向基类构造函数以及派生类数据成员传递一个或多个参数,需要使用成员初始化列表; 定义派生类对象时,构造函数的调用顺序如下: 基类构造函数。如果有多个基类,则构造函数的调用顺序是按照类派生表中出现的顺序,而不是它们在成员初始化表中的顺序; 成员类对象构造函数。如果有多个成员类对象,则构造函数的调用顺序是对象在类中被声明的顺序,而不是它们出现在成员初始化表中的顺序。 派生类构造函数。 作为一般规则,派生类构造函数应该不直接向一个基类数据成员赋值,而是把值传递给适当的基类构造函数,基类设计者的责任之一便是提供一组适当的基类构造函数。,3.2.1 基类构造函数,完成对基类Account_DB的设计,理解程序3_7.dsw。,2010年10月,重庆理工大学计算机科学与工程学院计算机科学与技术系刘恒洋,共13页第6页,3.2.2 派生类的构造函数,当基类构造函数带有参数时,派生类必须显式定义构造函数,以便向基类传递参数; 完成并理解程序3_8.dsw。,3.2.3 析构函数,当派生类对象的生命期结束时,如果派生类和基类都定义了析构函数,则它们会被自动调用,并且所有成员类对象的析构函数也会被自动调用; 当派生类对象的生命周期结束时,析构函数的调用顺序跟构造函数的调用顺序相反: Account_DB_Access类析构函数; 依次调用基类数据成员_host,_passwd,_user和_db_name的string析构函数。 Account_DB基类析构函数; 对于程序3_8.dsw,由于没有在堆上动态申请资源,所以基类和派生类都不需要显示定义析构函数。,2010年10月,重庆理工大学计算机科学与工程学院计算机科学与技术系刘恒洋,共13页第7页,3.3 多态性在C+中的体现,静态多态性:函数重载、运算符重载,在编译时完成 动态多态性:继承机制+虚函数,在运行时完成 虚拟函数机制只在使用指针和引用时才会起作用,所以只有在通过基类指针或引用间接指向派生类子类型时,多态性才会起作用; 理解并完成程序3.9.cpp;,3.3.1 纯虚拟函数在基类中的应用,通过程序3.9.cpp可以看出: 抽象基类中并不会给出具体的操作代码,而是给出了派生类中可能出现的所有动作的接口集合; 理论上,这种做法支持将来无限增加的派生类需求,而无需修改或者重新编译系统核心只要抽象基类的公有接口足够支持每个新的派生类接口即可; 抽象类不能真正出现在应用程序中,抽象类中的纯虚函数只是被用作占位符,会被后来的派生类改写,它们不希望被直接调用。同样,试图创建一个抽象基类的类对象会导致编译时刻错误,类似地,通过虚拟机制调用纯虚拟函数也是错误的,如:,Account_DB db; /错误:Account_DB抽象类中声明了纯虚拟函数,程序员不能创建独立的类对象 /正确:Account_DB_Access中的Account_DB子对象 Account_DB* pdb = new Account_DB_Access(“PTPS_DB“); Account_DB* pdb2 = new Account_DB; /错误:new表达式分配Account_DB对象,2010年10月,重庆理工大学计算机科学与工程学院计算机科学与技术系刘恒洋,共13页第8页,3.3.2 纯虚拟函数的静态调用,纯虚拟函数不但可以通过虚拟机制被调用,同样也可以被静态调用:当用类域操作符调用虚拟函数时,可以改变虚拟函数的调用机制,使得虚拟函数在编译时刻被静态解析;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 海上施工安全培训
- 煤炭清洁燃烧技术改造项目实施风险与对策分析报告
- 2025年能源行业智能电网数字化转型趋势分析及优化解决方案报告
- 高中语文38篇课内文言文挖空一遍过(教师版)
- 2025年农业产业集群产业集聚效应与区域经济增长研究报告
- 江苏省镇江市江山镇2024-2025学年高二下学期语文期末测试卷(含答案)
- 小麦助教产品培训
- 造价预算培训课件
- 心肌梗死溶栓后的护理
- 优抚政策培训课件下载
- 幼儿园中班数学活动课件:有趣的排序
- 2024年广东省惠州一中学英语七下期末达标检测试题含答案
- 2023-2024学年广西壮族自治区桂林市高二下学期期末质量检测数学试卷(含答案)
- 化妆品行业联合研发合同样本
- 畜禽生产概论-形考作业4-国开(HB)-参考资料
- 上海延安初级中学新初一均衡分班语文试卷含答案
- 工业园区智慧能源管理平台建设方案 产业园区智慧能源管理平台建设方案
- 化工生产仿真综合实训报告
- 中华民族共同体概论课件专家版8第八讲 共奉中国与中华民族聚力发展
- 24春国家开放大学《农业推广》形考任务1-5参考答案
- 学校文印室外包服务 投标方案(技术方案)
评论
0/150
提交评论