当前位置: 首页 > 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;
一个函数声明为纯虚函数后,其所在的类为抽象类,不能被实例化。

本文固定链接: http://2hei.net/c.html | 2hei's site

该日志由 2hei 于2008年04月02日发表在 c 分类下,
原创文章转载请注明: C++中的虚函数(学习) | 2hei's site

报歉!评论已关闭.