多态性(虚函数)与抽象类 c++.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
知识回顾 面向对象的基本概念 三大特点:封装、继承、多态 继承与派生的基本概念 派生类的声明格式 派生类的构造与析构函数 场景设定 Animal动物类分为Dog, Person类 拥有的共同行为有(speak) 共同属性name、age 场景设定 Animal动物类分为Dog, Person类 拥有的共同行为有(speak) 共同属性name、age 代码设计 分析问题 speak()函数的执行是基类行为 如何体现派生类的个性行为? 多态性? 第8章 虚函数与多态性 教学目标: 1. 了解虚函数、纯虚函数、抽象类概念; 2. 掌握虚函数的定义方法 3. 设计出抽象类 教学难点: 1.虚函数和抽象类的应用。 8.1 虚函数声明格式 代码设计 思考:如何使用虚函数? 1)同一类族中提供一组相似操作(行为) 2)类族中“同名同参数同类型”原则 3)虚函数在基类中定义(期望执行派生类函数) 4)定义一个基类指针来使用派生类的虚函数 虚函数的限制: 1.必须是成员函数 2.不能是静态成员函数 3.不能是inline函数 4.构造函数不能是虚函数 思考:类中函数均能定义为虚函数? 1)类族中同名的函数相似操作的函数 2)构造函数不能定义为虚函数 3)析构函数呢?? class A { public: A() { coutconstructing A\n; }; ~A() {coutA::destructor\n; }; }; class A { public: A() { coutconstructing A\n; }; vritual ~A() {coutA::destructor\n; }; }; class B : public A { public: B() { coutconstructing B\n; }; ~B() { coutB::destructor\n; }; }; void main() { A *pA=new B; // . . . . . . delete pA; // 先调用派生类B的构造函数,再调用基类A的构造函数 } 对于类族中暂时无法实现的成员函数,可以声明为纯虚函数,留给派生类去实现。 纯虚函数是指只给出函数声明而没给出实现的虚函数。 在一个继承层次结构中,抽象类的作用是为派生类提供一个基本框架和一个公共的对外接口。 class A //抽象类 { public: virtual int f()=0; //纯虚函数 }; ...... A a; //Error,A是抽象类 代码设计 8.4 综合案例 企业信息系统P274 小结 习题与项目设计 1. 以下( )成员函数表示纯虚函数。 A.virtual int vf(int); B.void vf(int)=0; C.virtual void vf()=0; D.virtual void vf(int) { }; 2.编译时的多态性可以通过使用( )获得。 A.虚函数和指针 B.重载函数和析构函 C.虚函数和对象 D.虚函数和引用 3.关于纯虚函数和抽象类的描述中,错误的是( )。 A.纯虚函数是一种特殊的虚函数,它没有具体的实现 B.抽象类是指包括纯虚函数的类 C.一个基类中说明有纯虚函数,该基类派生类一定不再是抽象类 D.抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出 项目设计 * * * * Animal Dog Person speak:哈喽 speak:汪汪 Dog Person speak:哈喽 speak:汪汪 class Animal { private:char name[10]; int age; public: void speak( ) {cout“speak!\n; } }; void main() { Animal *pa; Dog dog; Person ps; pa=dog; pa-speak(); pa= ps; pa-speak(); } class Dog : public Animal { public: void speak( ) { cout“Wang!\n; } }; 调用哪一个speak() 类型兼容性规则:派生类地址赋值给基类指针 class

文档评论(0)

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

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档