概述
虚函数机制作为C++面向对象的重要支撑,但是我们对它知之甚少,因为它由编译器实现,程序员很少用到。今天就对虚函数进行整理,理解了虚函数有一些东西就很好理解了,这样出去吹牛会更有底气。
1、虚函数的支持原理
每一个拥有虚函数的类会产生出一堆指向virtual functions的指针,放在表格中,这个表格被称为virtual table(虚函数表)。
在定义类的对象时,编译器会给这个对象插入一个合成指针,指向相关的virtual table。这个指针通常被称为vptr(虚指针)。vptr的设定和重置都由每个类的构造、析构和赋值运算符自动完成。
需要注意的是:每个类所关联的type_info(类型信息)也经由virtual table被指出,通常放在第一个表格。如下:
class Point
{
public:
Point( float xval);
virtual ~Point();
float x() const;
protected:
virtual ostream& print( ostream& os) const;
float _x;
};
这样做优点在于它的空间和存取时间的效率。缺点是增加或删除虚函数需要进行重新编译。