欢迎来到天天文库
浏览记录
ID:58009258
大小:261.00 KB
页数:22页
时间:2020-09-04
《继承与派生-虚函数和抽象类c++.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、知识回顾面向对象的基本概念三大特点:封装、继承、多态继承与派生的基本概念派生类的声明格式派生类的构造与析构函数8/27/2021场景设定Animal动物类分为Dog,Person类拥有的共同行为有(speak)共同属性name、ageAnimalDogPersonspeak:哈喽speak:汪汪8/27/2021场景设定Animal动物类分为Dog,Person类拥有的共同行为有(speak)共同属性name、ageDogPersonspeak:哈喽speak:汪汪8/27/2021代码设计classAnimal{private:charna
2、me[10];intage;public:voidspeak(){cout<<“speak!";}};voidmain(){Animal*pa;Dogdog;Personps;pa=&dog;pa->speak();pa=&ps;pa->speak();}classDog:publicAnimal{public:voidspeak(){cout<<“Wang!";}};调用哪一个speak()类型兼容性规则:派生类地址赋值给基类指针classPerson:publicAnimal{public:voidspeak(){cout<<“H
3、ello!";}};运行结果:speak!speak!期望结果:Wang!Hello!8/27/2021分析问题speak()函数的执行是基类行为如何体现派生类的个性行为?多态性?虚函数8/27/2021第8章虚函数与多态性教学目标:1.了解虚函数、纯虚函数、抽象类概念;2.掌握虚函数的定义方法3.设计出抽象类教学难点:1.虚函数和抽象类的应用。8/27/20218.1虚函数声明格式虚函数的概念:虚函数是一个类的成员函数,定义格式如下:virtual返回类型函数名(参数表){…};virtual仅用于类内定义成员函数,类外成员函数实现时不
4、可再加virtual。基类的成员函数是虚函数,其子类的同名的成员函数全是虚函数,不需要在前面加virtual8/27/2021代码设计classAnimal{private:charname[10];intage;public:virtualvoidspeak(){cout<<“speak!";}};voidmain(){Animal*pa;Dogdog;Personps;pa=&dog;pa->speak();pa=&ps;pa->speak();}classDog:publicAnimal{public:voidspeak(){cou
5、t<<“Wang!";}};调用哪一个speak()类型兼容性规则:派生类地址赋值给基类指针classPerson:publicAnimal{public:voidspeak(){cout<<“Hello!";}};运行结果:Wang!Hello!8/27/2021思考:如何使用虚函数?1)同一类族中提供一组相似操作(行为)2)类族中“同名同参数同类型”原则3)虚函数在基类中定义(期望执行派生类函数)4)定义一个基类指针来使用派生类的虚函数8/27/2021虚函数的限制:1.必须是成员函数2.不能是静态成员函数3.不能是inline函
6、数4.构造函数不能是虚函数8/27/2021思考:类中函数均能定义为虚函数?1)类族中同名的函数相似操作的函数2)构造函数不能定义为虚函数3)析构函数呢??类名数据成员函数成员普通函数析构函数构造函数8/27/2021classA{public:A(){cout<<"constructingA";};~A(){cout<<"A::destructor";};};8.3虚析构函数(引入)程序运行结果:constructingAconstructingBA::destructorclassB:publicA{public:B(){cout
7、<<"constructingB";};~B(){cout<<"B::destructor";};};voidmain(){A*pA=newB;//......deletepA;}8/27/20218.3虚析构函数(引入)新增变量新增方法从父类继承或重写的变量从父类继承或重写的方法基类派生类问题:出现了派生类对象的内存没有完全释放,内存泄露解决办法:调用派生类的析构函数,采用虚析构函数假设调用基类析构函数实现对派生类空间释放可否??8/27/2021派生类构造函数调用如下:基类构造函数;子类构造函数;派生类构造函数。8.3虚析构函数(
8、引入)析构顺序如下:先调用派生类的析构函数;子对象的析构函数;基类的析构函数。新增变量新增方法从父类继承或重写的变量从父类继承或重写的方法基类派生类结论:构造函数不
此文档下载收益归作者所有