文档详情

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

发布:2018-05-08约4.18千字共39页下载文档
文本预览下载声明
本讲重点分析 本讲重点分析 第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的区别 函数重载:函数名相同但参数不同 同名覆盖:在类族中,不同层次可能出现名字、参数
显示全部
相似文档