虚函数和纯虚函数的作用与区别_第1页
虚函数和纯虚函数的作用与区别_第2页
虚函数和纯虚函数的作用与区别_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、虚函数和纯虚函数的作用与区别 虚函数为了重载和多态的需要,在基类中是由定义的,即便定义是空,所以子类中可以重写也可以不写基类中的函数!纯虚函数在基类中是没有定义的,必须在子类中加以实现,很像java中的接口函数!虚函数引入原因:为了方便使用多态特性,我们常常需要在基类中定义虚函数。class Cmanpublic:virtual void Eat();void Move();private:;class CChild : public CManpublic:virtual void Eat();private:;CMan m_man;CChild m_child;/这才是使用的精髓,如果不定义

2、基类的指针去使用,没有太大的意义CMan *p ;p = &m_man ;p-Eat(); /始终调用CMan的Eat成员函数,不会调用 CChild 的p = &m_child;p-Eat(); /如果子类实现(覆盖)了该方法,则始终调用CChild的Eat函数/不会调用CMan 的 Eat 方法;如果子类没有实现该函数,则调用CMan的Eat函数p-Move(); /子类中没有该成员函数,所以调用的是基类中的纯虚函数引入原因:1、同“虚函数”;2、在很多情况下,基类本身生成对象是不合情理的。例如,动物作为一个基类可以派生出老虎、孔雀等子类,但动物本身生成对象明显不合常理。/纯虚函数就是基类

3、只定义了函数体,没有实现过程定义方法如下/ virtual void Eat() = 0; 直接=0 不要 在cpp中定义就可以了/纯虚函数相当于接口,不能直接实例话,需要派生类来实现函数定义/有的人可能在想,定义这些有什么用啊 ,我觉得很有用/比如你想描述一些事物的属性给别人,而自己不想去实现,就可以定/义为纯虚函数。说的再透彻一些。比如盖楼房,你是老板,你给建筑公司/描述清楚你的楼房的特性,多少层,楼顶要有个花园什么的/建筑公司就可以按照你的方法去实现了,如果你不说清楚这些,可能建筑/公司不太了解你需要楼房的特性。用纯需函数就可以很好的分工合作了虚函数和纯虚函数区别观点一:类里声明为虚函数

4、的话,这个函数是实现的,哪怕是空实现,它的作用就是为了能让这个函数在它的子类里面可以被重载,这样的话,这样编译器就可以使用后期绑定来达到多态了纯虚函数只是一个接口,是个函数的声明而已,它要留到子类里去实现。class Aprotected:void foo();/普通类函数virtual void foo1();/虚函数virtual void foo2() = 0;/纯虚函数观点二:虚函数在子类里面也可以不重载的;但纯虚必须在子类去实现,这就像Java的接口一样。通常我们把很多函数加上virtual,是一个好的习惯,虽然牺牲了一些性能,但是增加了面向对象的多态性,因为你很难预料到父类里面的这个函数不在子类里面不去修改它的实现观点三:虚函数的类用于“实作继承”,继承接口的同时也继承了父类的实现。当然我们也可以完成自己的实现。纯虚函数的类用于“介面继承”,主要用于通信协议方面。关注的是接口的统一性,实现由子类完成。一般来说,介面类中只有纯虚函数的。观点四:带纯虚函数的类叫虚基类,这种基类不能直

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论