现在,当你创建一个Role指针,并调用attack()函数时,编译器会调用该指针指向的对应于该对象类型的函数:
在某些情况下,你希望在一个基类中包含一个抽象函数,以便它可以在派生类中被重新定义以适应该类的对象,但是没有有意义的定义给基类中的函数类。
没有定义的抽象成员函数被称为纯虚函数。他们指定派生类自己定义该函数。
语法是用= 0(一个等号和一个零)替换它们的定义:
一个纯虚函数基本上定义了派生类将自己去定义的那个函数。
从具有纯虚拟函数的类继承的每个派生类必须重写该函数。
如果纯虚函数没有在派生类中重写,那么当您尝试实例化派生类的对象时,代码将无法编译并导致错误。
Role类中的纯虚函数必须在其派生类中重写。
我们不能对一个有纯虚函数的基类创建对象。
下列例子将会报错。
这些类被称为抽象类。他们只能被当作基类使用,因此被允许具有纯虚函数。
我们可能会认为抽象基类是无用的,但事实并非如此。 它可以用来创建指针并利用其的多态性质。