虚函数:被virtual关键字修饰的成员函数,就是虚函数。虚函数的作用,用专业术语来解释就是实现多态性(Polymorphism),多态性是将接口与实现进行分离;用形象的语言来解释就是实现以共同的方法,但因个体差异而采用不同的策略。例如可以使用父类的指针指向子类的实例,然后再通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有多种形态,这是一种泛型技术。
- 虚函数的声明如下:virtual ReturnType FunctionName(Parameter);
虚函数必须要实现,如果不实现,编译器将会报错。
纯虚函数:在很多情况下,基类本身生成对象是不合情理的。例如,动物作为一个基类可以派生出老虎、孔雀等子类,但动物本身生成对象明显不合常理。为了解决这个问题,方便使用类的多态性,引入了纯虚函数的概念,将函数定义为纯虚函数(方法:virtual ReturnType Function()= 0;),则编译器要求在派生类中必须予以重写以实现多态性。同时含有纯虚拟函数的类称为抽象类,它不能生成对象。
- 什么时候使用纯虚函数
1.当想要在基类中抽象出一个方法,而且这个基类只能够被继承,而不能够被实例化;
2.这个方法必须要在派生类(derived class)中被实现;
纯虚函数的定义方法为:vritual ReturnType Function(Type) = 0;
虚函数详解
虚函数表
虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的.在这个表当中,主要是一个类的虚函数的地址表,这张表解决了继承、覆盖的问题.保证其能够真实的反应实际的函数.这样,在有虚函数的类的实例中,这个表被分配在了这个实例的内存当中.