C++程序设计:第9讲_类之三 多态 虚函数 抽象 运算符重载

上传人:努力****83 文档编号:190716043 上传时间:2023-02-28 格式:PPT 页数:37 大小:2.60MB
返回 下载 相关 举报
C++程序设计:第9讲_类之三 多态 虚函数 抽象 运算符重载_第1页
第1页 / 共37页
C++程序设计:第9讲_类之三 多态 虚函数 抽象 运算符重载_第2页
第2页 / 共37页
C++程序设计:第9讲_类之三 多态 虚函数 抽象 运算符重载_第3页
第3页 / 共37页
点击查看更多>>
资源描述
第第9 9讲讲-类之三类之三 1、基类与派生类的相互调用 2、virtual函数、多态、纯虚函数、纯虚类 3、运算符重载第第9 9讲讲-类之三类之三 :虚函数虚函数 多态多态1 基类基类变量变量=子类子类变量变量 基类基类变量变量.函数仍是函数仍是基类基类的的函数函数 会造成派生类中定于的成员丢失,不要这样做!会造成派生类中定于的成员丢失,不要这样做!2 基类基类指针指针=&子类子类变量变量,基类指针基类指针-函数函数:A 执行执行基类函数基类函数(非虚函数)(非虚函数)B 执行执行子类函数(虚函数)子类函数(虚函数)不能通过基类指针调用不能通过基类指针调用子类子类独有独有的函数。的函数。第第9 9讲讲-基派关系基派关系第第8 8讲讲-虚拟函数虚拟函数第第9 9讲讲-基类派生类对象互调用基类派生类对象互调用第第9 9讲讲-基类派生类对象互调用基类派生类对象互调用第第9 9讲讲-基类派生类对象互调用基类派生类对象互调用第第9 9讲讲-基类派生类对象互调用基类派生类对象互调用第第9 9讲讲-类之三类之三 1、基类与派生类的相互调用 2、virtual函数、多态、纯虚函数、纯虚类 3、运算符重载第第9 9讲讲-类之三类之三 :虚函数虚函数 多态多态 有些类中函数无法编写,只有到子类才能编写,此有些类中函数无法编写,只有到子类才能编写,此乃虚函数乃虚函数。由于子类百花齐放!基类即父类的方法在子类呈现不同的实现形由于子类百花齐放!基类即父类的方法在子类呈现不同的实现形式与表现形式!此乃式与表现形式!此乃多态多态!1 基类基类变量变量=子类子类变量,变量,基类基类变量变量.函数仍是函数仍是基类基类的的函数会函数会 会丢失会丢失成员,不要这样做成员,不要这样做 2 基类基类指针指针=&子类子类变量变量,基类指针基类指针-函数函数,基类指针基类指针-函数函数:A 执行执行基类函数基类函数(非虚函数)(非虚函数)B 执行执行子类函数(虚函数)子类函数(虚函数)不能通过基类指针调用不能通过基类指针调用子类子类独有独有的函数。的函数。3 多态的充要条件:通过一个(多态的充要条件:通过一个(1)指向派生类对象指向派生类对象的(的(2)基类指基类指针(或引用)针(或引用)(3)调用虚函数调用虚函数。11多态多态是面向对象程序设计的重要特征之一。多态是指发出同样的消息被不同类型的对象接收时有可能导致完全不同的行为。多态的实现:函数重载(弱多态)运算符重载(弱多态)虚函数(强多态)12静态绑定与动态绑定绑定程序自身彼此关联的过程,确定程序中的操作调用与执行该操作的代码间的关系。静态绑定(静态联编)联编工作出现在编译阶段,用对象名或者类名来限定要调用的函数。动态绑定联编工作在程序运行时执行,在程序运行时才确定将要调用的函数。13虚函数虚函数是动态绑定的基础。是非静态的成员函数。在类的声明中,在函数原型之前写virtual。virtual 只用来说明类声明中的原型,不能用在函数实现时。具有继承性,基类中声明了虚函数,派生类中无论是否说明,同原型函数都自动为虚函数(称为在派生类中重写虚函数,该函数称为基类同名函数的一个覆盖(和遮蔽不同))。多态的充要条件:通过一个(多态的充要条件:通过一个(1)指向派生类指向派生类对象对象的(的(2)基类指针(或引用)基类指针(或引用)(3)调用虚调用虚函数函数。第第9 9讲讲-纯纯虚虚类(抽象类)与纯虚类(抽象类)与纯虚函数函数纯虚类允许有构造函数,以便构造纯虚类允许有构造函数,以便构造子类同步构造这个虚基类呀子类同步构造这个虚基类呀 第第9 9讲讲-纯纯虚虚类与纯虚类与纯虚函数函数纯虚类允许有构造函数,以便构造子类纯虚类允许有构造函数,以便构造子类同步构造这个虚基类呀同步构造这个虚基类呀 第第9 9讲讲-纯纯虚虚类与类与函数函数第第9 9讲讲-类之三类之三 1、基类与派生类的相互调用 2、virtual函数、多态、纯虚函数、纯虚类 3、运算符重载 11.16第第9 9讲讲-类之三类之三 :重载重载 1、二进制移位二进制移位运算符运算符与与=new delete等对自定义类重定义。等对自定义类重定义。第第9 9讲讲-类之三类之三 :重载的实现重载的实现 重载方式实现重载方式实现 operator运算符运算符,如如operator+,operator 告诉告诉编译系统编译系统是是重载运算符重载运算符,该符号与指定对象,该符号与指定对象一块出一块出现现时,必须按时,必须按这个函数这个函数的意思去解释。的意思去解释。由于函数由于函数operatorph或或coutph 直接给对象赋值或显示对象直接给对象赋值或显示对象 第第9 9讲讲-重载实例重载实例1 1operator()均为均为friend函数函数第第9 9讲讲-重载重载operator()为为friend函数,故无函数,故无phoneNumber:第第9 9讲讲-重载重载实际执行实际执行operator(cin,ph)第第9 9讲讲-类之三类之三 :重载的实现重载的实现重载一元运算符重载一元运算符 自定义类自定义类的的一元运算符一元运算符可以可以重载重载为为不带参数不带参数的的非非static函数成员,或者带有一个参数的函数成员,或者带有一个参数的全局函数全局函数。class Stringpublic:bool operator!()const;.;编译器遇到编译器遇到!s时,会自动转换为时,会自动转换为s1.operator!()函数函数全局函数不能用全局函数不能用句点句点调用,所以需要调用,所以需要一个参数一个参数。由于自定义类的由于自定义类的对象对象,只能采用,只能采用传引用传引用或或指针指针方式,函方式,函数中数中修改修改后都后都影响影响到到实参实参,故有,故有const修饰物。修饰物。第第9 9讲讲-类之三类之三 :重载的实现重载的实现重载二元运算符重载二元运算符 自定义类的二元运算符,可重载为带一个参数的非自定义类的二元运算符,可重载为带一个参数的非static函数,或二个参数的全局函数。如:函数,或二个参数的全局函数。如:class String /friend bool operator(const String&,const String&);public:bool operator!()const;bool operator(const String&)const;当编译器遇到当编译器遇到s1s2时,会调用自定义函数时,会调用自定义函数s1.operator(s2),所以只要一个参数。,所以只要一个参数。第第9 9讲讲-类之三类之三 :重载的实现重载的实现动态内存管理动态内存管理数组定义时,需确定数组的长度数组定义时,需确定数组的长度,编译静态确定空间编译静态确定空间byte a120;int b100;char c120;/int bb=new int100;/bb保存首个元素的地址,这种写法不行呀!保存首个元素的地址,这种写法不行呀!int*bb=new int100;/凡是动态申请的,其地址只能保存在指针变量中凡是动态申请的,其地址只能保存在指针变量中delete bb;/因为申请了一批空间,所以删除时要带上因为申请了一批空间,所以删除时要带上,才能删除一批,才能删除一批delete bb;/只释放了只释放了首个首个地址空间地址空间Time*timePtr=new Time;/默认构造函数,默认构造函数,Time数据成员、函数成员决定数据成员、函数成员决定delete timePtr;Time*timePtr2=new Time(10,20,30);/10点点20分分30秒,调用构造函数秒,调用构造函数动态建立动态建立Time objTime=Time(10,20,30);/静态编译阶段静态编译阶段就构造,地址是固定的就构造,地址是固定的double*doublePtr=new double(31.1314);/分派内存,置入初值分派内存,置入初值double double1=31.13313;/静态分配,在编译阶段完成,地址也是固定的静态分配,在编译阶段完成,地址也是固定的 Array第第9 9讲讲-重载重载Array第第9 9讲讲-重载重载Array第第9 9讲讲-重载重载Array第第9 9讲讲-重载重载-Date类类 11.1911.19第第9 9讲讲-重载重载-Date类类第第9 9讲讲-重载重载-Date类类第第9 9讲讲-重载重载-Date类类
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!