虚函数表是在什么时期建立的? 最近参加阿里巴巴公司的内推,面试官问了“虚函数表是在什么时期建立的?”。因为以前对虚函数表的理解不够多,所以就根据程序构建(Build)的四个过程(预编译、编译、汇编和链接),推导出虚函数表应该是在编译器确定的,原因如下: 1)预编译器主要处理那些源代码文件中的以“.....
分类:
编程语言 时间:
2015-07-27 00:07:31
阅读次数:
1123
很多教材上都有介绍到虚指针、虚函数与虚函数表,有的说类对象共享一个虚函数表,有的说,一个类对象拥有一个虚函数表;还有的说,无论用户声明了多少个类对象,但是,这个VTABLE虚函数表只有一个;也有的在说,每个具有虚函数的类的对象里面都有一个VPTR虚函数指针,这个指针指向VTABLE的首地址,每个类的对象都有这么一种指针。今天,我们就来解决这个问题,同一个类的不同对象,是不是拥有“相同”的虚函数表,这个相同是物理上的相同(内存地址)还是逻辑上的相同(数据结构)。本文现详述如下!...
分类:
编程语言 时间:
2015-07-26 17:24:57
阅读次数:
148
一般VC和BCB是将vPtr放在类实例的前四个字节,GCC是放在末尾。在某些情况下需要考虑表指针的位置,比如序列化的时候。其实只需将类实例的首地址与类的第一个成员变量地址相比较就可得知虚表指针的位置。class A{ A(void){} virtual void Foo(void...
分类:
其他好文 时间:
2015-07-26 17:08:16
阅读次数:
167
要求理解覆盖、重载、隐藏的概念与相互之间的区别;熟记类继承中对象、函数的访问控制;掌握虚函数、虚函数表、虚函数指针的联系;理解区分虚函数和虚继承在虚方法、虚指针在空间分配上的重点与难点;熟练使用多重继承,要求能区分基类的同名函数和基类的空间布局。...
分类:
编程语言 时间:
2015-07-25 20:03:16
阅读次数:
258
C++对象模型中加入多继承从单继承可以知道,派生类中只是扩充了基类的虚函数表。如果是多继承的话,又是如何扩充的?1)每个基类都有自己的虚表。2)子类的成员函数被放到了第一个基类的表中。3)内存布局中,其父类布局依次按声明顺序排列。4)每个基类的虚表中的print()函数都被overwrite成了子类...
分类:
编程语言 时间:
2015-07-24 16:06:01
阅读次数:
142
类的虚函数调用是通过虚函数表实现的。所谓虚函数表,是编译器自动为一个带有虚函数的类生成的一块内存空间,其中存储着每一个虚函数的入口地址。由于函数的入口地址可以看成一个指针类型,因此这些虚函数的地址间隔为四个字节。而每一个带有虚函数类的实例,编译器都会为其生成一个虚函数指针——vptr,在类的对象.....
分类:
其他好文 时间:
2015-07-20 18:41:17
阅读次数:
200
多态性(polymorphism)
即:向不同对象发送同一个消息,不同的对象在接收时候会产生不同行为。
所谓消息,就是函数调用。
C++中多态性就是:具有不同功能的函数可以有相同的函数名称。即实现用同一个函数名调用不同的函数内容。
C++多态性分为:静态多态性 和 动态多态性
静态多态性:通过函数重载或者运算符重载实现,在编译阶段即知道函数的全...
分类:
编程语言 时间:
2015-07-16 22:15:12
阅读次数:
211
C++多态的实现原理是依赖虚指针来辨别具体使用家族类中的哪一个函数。以下就来证明虚指针的存在。
我们知道,指针的大小在一般情况下是4个字节,所以我们建立一个虚函数,再来计算该类的大小,便可以验证虚函数的存在。
代码如下:#include
using namespace std;class A
{
public:
void print ()...
分类:
其他好文 时间:
2015-07-13 18:46:59
阅读次数:
134
简单归纳:1.(无虚函数或有虚函数的)空类的sizeof是1,它的实例化也需要独一无二的空间地址2.无虚函数的类的sizeof是内部成员大小之和3.有虚函数的类的sizeof是内部成员大小之和再加4,这样的类有一个指向虚函数表的指针4.子类的sizeof是基类的大小加上子类成员大小,若子类有新的虚函...
分类:
其他好文 时间:
2015-07-10 18:54:57
阅读次数:
181
C++它指定虚函数的行为,但实现的作者编译器.通常,编译器处理虚函数的方法是给每个对象加入一个隐藏成员.隐藏成员中保存了一个指向函数地址数组的指针.这个数组称为虚函数表(virtual function table,vtbl).虚函数表中存储了为类对象进行声明的虚函数的地址.比如:基类对象包括一个指...
分类:
编程语言 时间:
2015-07-10 18:31:59
阅读次数:
116