码迷,mamicode.com
首页 > 编程语言 > 详细

C++虚函数实现机制

时间:2015-07-27 19:05:27      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:c++   多态   虚拟表   虚指针   vtable   

C++中虚函数的实现机制主要是VTable和虚指针。详细如下:


class A {

public:

virtual void f1();

virtual void f2();

private:

int a;

}


class B {

public:

void f1();

private:

int b;

}


如上A,B两个类,编译器为A类准备了一个虚表VTableA如下:

A::f1的地址
A::f2的地址

编译器为B类准备的VTableB如下:

   B::f1的地址
   A::f2的地址

B类重写了f1,所以类B的VTable中记录的是B::f1()的入口地址,而f2是从A继承下来的,所以f2还是用A::f2的入口地址。

当定义B b = new B()时,编译器分配空间时,还会分配一个虚指针vptr指向B的VTable。


所以当使用如下语句:

A *pA = &b;  pA->f1(); 

编译器知道,f1是一个virtual成员函数,其入口地址放在表格的第一项,所以会转换为call*(pA->vptr)[0]。而这一项是放置B::f1的入口地址。

就实现了多态。


版权声明:本文为博主原创文章,未经博主允许不得转载。

C++虚函数实现机制

标签:c++   多态   虚拟表   虚指针   vtable   

原文地址:http://blog.csdn.net/xiaokfc/article/details/47086933

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!