1.虚函数是用于多态中virtual修饰父类函数,确保父类指针调用子类对象时,运行子类函数的。
2.纯虚函数是用来定义接口的,也就是基类中定义一个纯虚函数,基类不用实现,让子类来实现。
3.虚基类是用来在多继承中,如果父类继承自同一个父类,就只实例化一个父类(说的有点绕,就是只实例化一个爷爷的意思=。=)。
为了记住以上区别,首先,需要明白为什么要引入虚函数,虚函数的作用是什么,有什么优势。(可参考:http://blog.csdn.net/huangyimo/article/details/50480313)
指针的灵活性,能实现多态重载。一个指针可以通过改变其指向的对象输出其与基类中相同的函数。相当于坐上一辆车后,你想到达不同地点只要告诉司机目的地就可以了。
总结 :1、虚函数
通过虚函数,在调用不同的衍生类的时候,可以拥有不同的功能。同时,我们可以通过将每个继承类都重写命名一个函数来替代也可以,这么做完全可以,只要你自己能熟记或者找到这个重命名函数是干嘛用的;但是在大一点的项目中,由于类中的函数成百上千,恐怕你就会为此疯狂。
虚基类:派生类多继承的,具有公共基类的基类。理解几条道路的汇合点。
纯虚函数:基类的虚函数是不用定义的,留给子类去实现。
当函数没有实现方法或者需要子类来定义实现方法的时候,可以在父类中定义纯虚函数。就是这么简单!于是当不同的子类继承这个父类的时候,定义不同的实现方法,那么实例化这个子类的时候,这个纯虚函数就有了不同的方法。这也解释了为什么包含纯虚函数的抽象类为什么不能实例化,因为它中间有函数根本不知道是怎么个实现!当然我们可以用其他方法避免使用纯虚函数,比方说在子类中重写print方法,但是这样一来等于除了order函数代码以外所有的代码都要重新复制一遍,当继承类越来越多的时候,要修改print等于这一堆继承类都要修改,会疯的!所以说纯虚函数是一个很神奇的用法,也是简化了编程使得面向对象的方法更加灵活。
参考:http://blog.csdn.net/huangyimo/article/details/50480313
2.纯虚函数(pure virtual)
C++中包含纯虚函数的类,被称为是“抽象类”。抽象类不能使用new出对象,只有实现了这个纯虚函数的子类才能new出对象。
C++中的纯虚函数更像是“只提供申明,没有实现”,是对子类的约束,是“接口继承”。
C++中的纯虚函数也是一种“运行时多态”。
|