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 类的虚表了。也可以把基类理解为类型标注。