为了支持多态性,C++中的虚函数表元素包含了指向类的信息(通常是该类的完整类型名称)。此指针被称为back-pointer,它是由类的编译器自动添加到每一个具有虚函数的类的对象中的。该指针指向类的开始部分,从而可以快速的访问虚函数表。
以下是包含back-pointer的类的示例代码:
class Shape {
public:
virtual void draw() = 0;
};
class Rectangle : public Shape {
public:
void draw() override {
// draw rectangle
}
private:
int width_;
int height_;
};
class Circle : public Shape {
public:
void draw() override {
// draw circle
}
private:
int radius_;
};
int main() {
Circle c;
Shape* shape = &c;
shape->draw(); // 调用Circle类的虚函数
return 0;
}