现在,当你创建一个Role指针,并调用attack()函数时,编译器会调用该指针指向的对应于该对象类型的函数:

在某些情况下,你希望在一个基类中包含一个抽象函数,以便它可以在派生类中被重新定义以适应该类的对象,但是没有有意义的定义给基类中的函数类。

没有定义的抽象成员函数被称为纯虚函数。他们指定派生类自己定义该函数。

语法是用= 0(一个等号和一个零)替换它们的定义:

一个纯虚函数基本上定义了派生类将自己去定义的那个函数。

从具有纯虚拟函数的类继承的每个派生类必须重写该函数。

如果纯虚函数没有在派生类中重写,那么当您尝试实例化派生类的对象时,代码将无法编译并导致错误。

Role类中的纯虚函数必须在其派生类中重写。

我们不能对一个有纯虚函数的基类创建对象。

下列例子将会报错。

这些类被称为抽象类。他们只能被当作基类使用,因此被允许具有纯虚函数。

我们可能会认为抽象基类是无用的,但事实并非如此。 它可以用来创建指针并利用其的多态性质。