C++中的虚函数(学习)
Apr022008
作者:u2 发布:2008-04-02 15:02 分类:c C++中的虚函数(学习)已关闭评论
虚函数实现C++中的多态(polymorphism)。只有指定为虚函数的成员才能进行动态绑定。必须通过基类的引用或指针对虚函数进行调用。
通过引用或指针调用虚函数时,编译器将生成代码,运行时确定调用哪个函数。被调用的函数时与动态类型相对应的。
虚函数编译处理的方式:
VTABLE机制。编译器发现一个类中有虚函数时,会为其创建一个虚函数表,即VTABLE。VTABLE实际上是一个函数指针的数组,每个函数占用这个数组的一个slot。一个类只有一个VTABLE。派生类有自己的VTABLE,与基类有相同的函数排列顺序。创建类实例,调用构造函数时,编译器会在每个实例的内存区中增加一个VPTR字段,该字段指向VTABLE。
虚函数的语法:virtual function();
基类中声明的虚函数在派生类中也是虚函数。
基类的析构函数必须是虚函数。
class A
{
~A();
}
class B
{
~B();
}
void foo
{
A *a = new B;
delete a;
}
上面的例子,delete a时,只有A::~A()被调用,B::~B()没有被调用。将A的析构函数改为virtual ~A(),上面例子中的B::~B()才被调用。
基类private 的虚函数,派生类可以访问。
一个类的虚函数在它自己的构造函数和虚函数中调用时,就变成普通函数了。
纯虚函数: virtual function() = 0;
一个函数声明为纯虚函数后,其所在的类为抽象类,不能被实例化。
最活跃的读者