虚函数
被virtual
修饰的成员函数称为虚函数
- 定义一个函数为虚函数,是为了使用基类指针调用子类函数。
- 虚函数,不代表函数不被实现。
- 只有纯虚函数才不被实现,纯虚函数定义了一个接口,起到规范的作用。
#include <iostream>
using namespace std;
class A
{
public :
virtual void foo()
{
cout << "A :: foo() is called" << endl;
}
};
class B : public A
{
public :
void foo()
{
cout << "B :: foo() is called" << endl;
}
};
int main()
{
A *a = new B();
a->foo();
}
注:
当类A中的foo函数前不加virtual关键字时,该程序运行结果如下:
纯虚函数
纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原型后加 =0:
virtual void foo() = 0;
- 含有纯虚函数的类称为抽象类,其不能生成对象,只能生成派生类生成的对象(在很多情况下,基类本身生成对象是不合情理的。例如,动物作为一个基类可以派生出老虎、孔雀等子类,但动物本身生成对象明显不合常理。)
- 派生类中必须重写实现纯虚函数