黄永峰《面向对象的程序设计》第8讲类的多态性与虚函数.pptVIP

黄永峰《面向对象的程序设计》第8讲类的多态性与虚函数.ppt

  1. 1、本文档共39页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
本讲重点分析 本讲重点分析 第8次作业的必做题目 本次作业1题,要求同前面,在第11周末交作业 要求内容:在第7次作业,对程序进行如下改进 (1)在4个类中分别定义一个同名函数(PAY())来计算4类人员的工资;并要求在main()函数中,采用指向基类指针变量来调用这4个类中的PAY()函数。 (2)公司在员工的要求下,对员工工资每隔1年就调级。4类岗位的调级方法不同,具体上浮多少工资由程序员来确定。建议:采用升级函数promote(参数)来实现,考虑不同类中promote(参数)的功能不同,因此,可以在基类中将 promote申明为虚函数,用多态性来实现程序功能 面向对象程序设计特点总结 抽象性:类是对象的抽象,对象是类的具体实例;类模板是类的抽象,类是类模板的具体实例;基类是派生类的抽象,派生类是基类的具体实例等 封装性:类成员的3种访问属性;公有接口与私有实现的分离;类申明与成员函数定义的分离;构造函数 继承性:3种继承方式,派生类成员的4种访问属性;派生类的构造函数;多重继承中函数同名问题与虚基类 多态性:函数重载、运算符重载、多层派生的函数同名问题与虚函数;纯虚函数与抽象类 面向对象程序设计关键技术总结 对象成员的3种访问方式;6种构造函数;对象指针(this); 数据保护的6种常类型;对象动态建立与释放;对象的复制(浅拷贝与深拷贝问题);静态成员,友元函数 运算重载规则;成员函数与友元函数重载;类型转换函数与转换构造函数; 派生类的构造函数的实现方法;基类与派生类的兼容性问题 虚函数的引用方法;虚析构函数 Cin和cout;文件操作与文件流 异常处理 错误原因是第2行注释了,没有使用命名空间。主要说明:编译错误提示不一定与错误原因对应。 * 第8讲多态性与虚函数 8.1 基类与派生类的兼容规则 8.2 多态性的概念 8.3 虚函数 8.4 纯虚函数与抽象类 参考教材的第12章内容 8.1 基类与派生类的兼容规则 在族类中,类型兼容规则是指在需要基类对象的任何地方,都可以使用公有(Public)派生类的对象来替代 注意:在替换之后,派生类对象可以作为基类的对象使用,但只能使用基类的成员 (1) 派生类对象可以向基类对象赋值 A a1; //定义基类A对象a1 B b1; //定义类A公用派生类B对象b1 a1=b1; //用对象b1对基类对象a1赋值 问题:是否可以用基类对象对其派生类对象赋值?同一基类的不同派生类对象之间是否可以赋值? (2) 派生类对象可向基类对象的引用赋值 注意: 此时r并不是b1的别名,它只是b1中基类部分的别名,r与b1中基类部分共享同一段存储单元 (3)基类对象的指针变量可指向派生类对象 问题:为什么程序中第31和29语句指向不同,却没有显示“pay”值? 分析下列程序结果 int main() {student stud1(1001,”li”,87.5); graduate grad1(201,”wan”,98,532); student stud-alias=grad1; student stud=grad1; stud1.display(); grad1.display(); stud.display(); stud-alias.display(); return( 0); } 运行结果: num:1001 name:li scores:87.5 num:201 name:wan Scores:98 Pay:532 num:201 name:wan Scores:98 num:201 name:wan Scores:98 多态性: 程序向不同对象发送同一个消息(调用同名函数),不同对象在接收时会产生不同行为(实现不同功能) 8.2 多态性的概念 生活中的多态性例子 多态性分类 重载多态:函数或运算符重载 强制多态:数据或对象的类型强制转换 包含多态:研究类族中定义同名成员函数的多态行为,主要通过虚函数来实现 参数多态:类模板实例化时的多态性,即实例化后的各个类都具有相同的操作 多态性实现方式分类 静态多态性:编译时多态性,例如:函数重载和运算符重载,强制类型转换等 动态多态性:运行时多态性,程序运行过程中动态确定操作所针对的对象,主要通过虚函数(virtual function)实现 (1) 声明基类Point类 为什么不能改为Private 为什么出现这么多错? (2) 声明派生类Circle 调用哪个重载函数? Ref为什么不是C引用 重载多态 (3) 声明Circle的派生类Cylinder 调用哪个area()? pRef的区别 函数重载:函数名相同但参数不同 同名覆盖:在类族中,不同层次可能出现名字、参数

您可能关注的文档

文档评论(0)

1243595614 + 关注
实名认证
文档贡献者

文档有任何问题,请私信留言,会第一时间解决。

版权声明书
用户编号:7043023136000000

1亿VIP精品文档

相关文档