您的位置:首页 > 编程语言 > C语言/C++

C++虚函数与虚函数表

2013-03-10 12:00 197 查看

转自:/article/7055705.html

多态性可分为两类:静态多态和动态多态。函数重载和运算符重载实现的多态属于静态多态,动态多态性是通过虚函数实现的。

每个含有虚函数的类有一张虚函数表(vtbl),表中每一项是一个虚函数的地址, 也就是说,虚函数表的每一项是一个虚函数的指针。

没有虚函数的C++类,是不会有虚函数表的。

两张图:





简单例子:见链接地址

查看对象b在内存中:



查看虚函数表:



虚函数表的指针4个字节大小(vptr),存在于对象实例中最前面的位置(这是为了保证取到虚函数表的有最高的性能——如果有多层继承或是多重继承的情况下)。这意味着我们通过对象实例的地址得到这张虚函数表,然后就可以遍历其中函数指针,并调用相应的函数。

虚函数表的结束标志在不同的编译器下是不同的。在VC6.0下,这个值是NULL,如图:



另一个例子:

查看对象d在内存中:



多重继承:

有几个父类,就有几个vtab和vptr





代码:

见链接地址
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: