纯虚类(abstract class)
c++中没有 abstract 关键字,也没有 interface 关键字。纯虚类的作用就是充当一个接口。
如果成员都处于未实现状态,这个类就是纯虚类。
class Node { // abstract class public: virtual int getIndex() = 0; // 纯虚函数 };
虚函数与虚函数表
继承纯虚类并重写父类虚函数表。
Rect 类从 Node 类中继承了虚函数表和虚函数表指针,然后 Rect 类把虚函数表重写。
class Rect: public Node { public: // 重写父类虚函数表 virtual int getIndex(){ // 虚函数 return 233; } }; class Box: public Rect { public: // 重写父类虚函数表 int getIndex(){ return 114514; } };
使用基类指针调用子类实例:
int main(){ // 基类指针指向子类实例 Node* node1 = new Rect; Node* node2 = new Box; std::cout<<node1->getIndex()<<std::endl; std::cout<<node2->getIndex()<<std::endl; }
虽然是定义了基类指针指向子类实例,但是基类类型中就声明了虚表指针,所以虽然访问的是 Node 类的虚表指针,但是指向的却是 Rect 类实例的内存,实际访问放的就是 Rect 类的虚表了。也可以把基类理解为类型标注。