虚函数和纯虚函数、
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
首先:强调一个概念
定义一个函数为虚函数,不代表函数为不被实现的函数
定义他为虚函数是为了允许用基类的指针来调用子类的这个函数
定义一个函数为纯虚函数,才代表函数没有被实现
定义他是为了实现一个接口,起到一个规范的作用,规范继承这个
类的程序员必须实现这个函数。
虚函数是用于后期动态绑定的,可以实现运行期多态。
说白了就是一个函数指针,在运行的时候才确定最终要调用的目标。
纯虚函数顾名思义就是完全虚的函数,它没有绑定到任何一个实际函数上,是空的。
纯虚函数主要是用来阻止类的实例化,强制要求类的派生者必须实现该函数否则也不能实例化,相当于C#或java的abstract函数。
如果一个类中所有的函数都是纯虚函数,则该类就构成了一个接口。
定义纯虚函数就是为了让基类不可实例化化, 因为实例化这样的抽象数据结构本身并没有意义. 或者给出实现也没有意义
实际上我个人认为纯虚函数的引入,是出于两个目的,
1.为了安全.因为避免任何需要明确但是因为不小心而导致的未知的结果. 提醒子类去做应做的实现.
2.为了效率,不是程序执行的效率,而是为了编码的效率.
纯虚函数与虚函数定义一个函数为虚函数,不代表函数为不被实现的函数 ,定义他为虚函数是为了允许用基类的指针来调用子类的这个函数 。
定义一个函数为纯虚函数,才代表函数没有被实现 ,定义他是为了实现一个接口,起到一个规范的作用,程序员必须实现这个函数。
关于实例化一个类: 有纯虚函数的类是不可能生成类对象的,如果没有纯虚函数则可以。有纯虚函数的类是抽象类,不能生成对象,只能派生。
他派生的类的纯虚函数没有被改写,那么,它的派生类还是个抽象类。
虚函数在多态中间的使用: 多态一般就是通过指向基类的指针来实现的。
用父类的指针在运行时刻来调用子类: 具体到运行时决定了才决定用那个函数。
虚函数为了重载和多态的需要,在基类中即便定义是空,所以子类中可以重写也可以不写基类中的函数!
定义纯虚函数就是为了让基类不可实例化化, 因为实例化这样的抽象数据结构本身并没有意义. 或者给出实现也没有意义 ,
但是在很多情况下,基类本身生成对象是不合情理的。
例如,动物作为一个基类可以派生出老虎、孔雀等子类,但动物本身生成对象明显不合常理。
实际上我个人认为纯虚函数的引入,是出于两个目的,
1.为了安全.因为避免任何需要明确但是因为不小心而导致的未知的结果. 提醒子类去做应做的实现.
2.为
了效率,不是程序执行的效率,而是为了编码的效率. 虚函数引入原因:为了方便使用多态特性,我们常常需要在基类中定义虚函数。