欢迎来到天天文库
浏览记录
ID:51777217
大小:533.29 KB
页数:42页
时间:2020-03-07
《C++面向对象程序设计(第二版) 教学课件 作者 张俊 Ch08-虚函数与多态性.pptx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C++与面向对象程序设计1面向对象程序设计第8章虚函数与多态性C++与面向对象程序设计2内容提要8.1虚函数virtualfunction8.2纯虚函数和抽象类abstractclass8.3多态性polymorphismC++与面向对象程序设计3第8章虚函数与多态性8.1概述C++与面向对象程序设计48.1.1回顾—赋值兼容规则public继承时,派生类对象是基类对象.C++与面向对象程序设计58.1.1回顾—赋值兼容规则基类对象可以赋值为派生类对象.对象切割(丢失了派生类的部分信息)LSP(L
2、iskovSubstitutionPrinciple)派生类应用于基类的场合三段论:规则+前提结论C++与面向对象程序设计68.1.1回顾—赋值兼容规则为避免丢失派生类对象的信息:基类指针和基类引用可以指向派生类对象.以基类名义存储派生类对象.好处:操作的统一C++与面向对象程序设计78.1.1示例—操作的统一例8.1:形状类的名称和面积C++与面向对象程序设计88.1.1示例—操作的统一例8.1:形状类的名称和面积C++与面向对象程序设计98.1.1示例—操作的统一例8.1:形状类的名称和面积
3、C++与面向对象程序设计108.1.1问题—派生类的个性没了?以基类名义存储的派生类对象怎么展现派生类的特点?示例欠缺:根据对象指针或对象引用所指对象的实际类型,调用正确的函数.绑定(binding)C++与面向对象程序设计118.1.1分析—关于绑定绑定:函数调用与函数定义之间的对应两种类型:静态绑定动态绑定C++与面向对象程序设计128.1.1分析—两种绑定方式别名发生时期静态关联staticbinding早期联编编译连接阶段动态关联dynamicbinding滞后联编运行阶段两种方式对比8
4、.1.2示例—静态绑定示例普通函数:C++与面向对象程序设计138.1.2示例—静态绑定示例基类指针对操作的调用C++与面向对象程序设计148.1.2小结—静态绑定规则在发生静态绑定时,所调用的函数由对象指针(或对象引用)的类型决定.C++与面向对象程序设计158.1.3示例—动态绑定示例我们希望:C++与面向对象程序设计168.1.3小结—动态绑定规则在发生静态绑定时,所调用的函数由对象指针(或对象引用)本身的类型决定.(只看表面)在发生动态绑定时,所调用的函数由对象指针(或对象引用)所指对象的
5、类型决定.(探究实质)C++与面向对象程序设计17C++与面向对象程序设计18第8章虚函数与多态性8.2虚函数C++与面向对象程序设计198.2.1虚函数(virtualfunction)定义的语法virtual(基类)成员函数原型;C++与面向对象程序设计208.2.1虚函数(virtualfunction)定义虚函数时不需virtual关键字。C++与面向对象程序设计218.2.1虚函数(virtualfunction)保持接口一致否则不认为是虚函数C++与面向对象程序设计228.2.1虚函数
6、(virtualfunction)必须通过对象指针调用虚函数,才能实现动态绑定.C++与面向对象程序设计238.2.1虚函数(virtualfunction)也可以通过对象引用调用虚函数,来实现动态绑定.C++与面向对象程序设计248.2.1虚函数(virtualfunction)如果通过对象调用虚函数,是不能实现动态绑定的.C++与面向对象程序设计258.2.2应用示例典型应用:P323:例8.2Person类及其派生类P324:例8.3计算器类Calculator及其派生类C++与面向对象程序
7、设计268.2.2应用示例非典型应用:P326:例8.4仅需理解P327:例8.5仅需理解C++与面向对象程序设计278.2.3虚函数表动态绑定的实现机制复杂的三级指针C++与面向对象程序设计288.2.3虚函数表虚函数对对象的影响P329:例8.6C++与面向对象程序设计298.2.4虚析构函数构造函数不能为虚函数析构函数应为虚函数.P331:例8.8C++与面向对象程序设计308.2.4动态关联的三个特点基类中定义有虚函数;从基类继承并重定义该虚函数;对象指针或者引用访问;C++与面向对象程序
8、设计318.2.4总结几个关键字可修饰函数者inlinestaticexternfriendvirtualC++与面向对象程序设计32第8章虚函数与多态性8.4纯虚函数和抽象类C++与面向对象程序设计33需要纯虚函数(purevirtualfunction)的原因:某些类太抽象,实现函数没有意义纯虚函数的语法virtual成员函数原型=0;纯虚函数与虚函数的区别(pure)8.4.1纯虚函数C++与面向对象程序设计348.4.2抽象类/抽象基类定义:具有纯虚函数的类作用:为子类提供
此文档下载收益归作者所有