转载自http://blog.csdn.net/tujiaw/article/details/6753498 1. 用virtual关键字申明的函数叫做虚函数,虚函数肯定是类的成员函数。2. 存在虚函数的类都有一个一维的虚函数表叫做虚表。类的对象有一个指向虚表开始的虚指针。虚表是和类对应的,虚表指针 ...
分类:
编程语言 时间:
2017-10-29 11:23:00
阅读次数:
191
参考:http://www.weixueyuan.net/view/6372.html 总结: 在C++中通过虚成员函数表vtable实现多态,虚函数表中存储的是类中虚函数的入口地址。 使用多态会降低程序运行效率,使用多态的程序会使用更多的存储空间,存储虚函数表等内容,而且在调用函数时需要去虚函数表 ...
分类:
编程语言 时间:
2017-10-15 11:30:28
阅读次数:
216
1.无继承的普通类: 在有虚函数的情况下类会为其增加一个隐藏的成员,虚函数表指针,指向一个虚函数表,虚函数表里面就是类的各个虚函数的地址了。那么,虚函数表指针是以什么模型加入到类里面的,虚函数表里面又是怎么安排的呢。简单来看下就可以知道了。 #include"stdafx.h" #pragma pa ...
分类:
编程语言 时间:
2017-09-26 23:44:59
阅读次数:
399
对于一个class object来说,我们需要多少内存才能表现出来,大致分为3类,这里在前面文章有内存图 (1)非静态数据成员的综合大小,这也符合了c++对象模型的结构 (2)填充字节,就是我们所说的,内存对齐 (3)若存在虚函数,则还会产生一个为了支持virtual的指针指向虚函数表 (这里也可以 ...
分类:
其他好文 时间:
2017-09-26 23:39:17
阅读次数:
220
在virtual的知识里摸爬滚打好几天,最近大脑有些不够用了,现在整理一下 非考虑内存对齐时各个结构的大致模型 至于考绿内存的在前面几张已经叙述过了,为了方便,我再纸上画了整体的流程,, 内存分配要注意对齐参数=min(pack,最大字节的类型); 虚函数指针和虚函数表指针跨越的大小一定是对齐参数的 ...
分类:
其他好文 时间:
2017-09-26 23:36:37
阅读次数:
158
在讲多态之前,我们先来说说关于多态的一个基石 类型兼容性原则。 一、背景知识 1.类型兼容性原则 类型兼容规则是指在需要基类对象的任何地方,都可以使用公有派生类的对象来替代。通过公有继承,派生类得到了基类中除构造函数、析构函数之外的所有成员。这样,公有派生类实际就具备了基类的所有功能,凡是基类能解决 ...
分类:
编程语言 时间:
2017-09-03 17:53:37
阅读次数:
212
1.(mov ecx,dword ptr [ebp-0Ch])将this指针压入ecx 2.(mov edx,dword ptr [ecx])this指针指向该对象的首地址,而该处的前四个字节存放着该对象的虚函数表的首地址,将虚表指针放到edx中。 3.(call dword ptr [edx+4] ...
分类:
其他好文 时间:
2017-09-02 01:05:55
阅读次数:
115
本文为博主学习虚函数时,结合网上博客和相关书籍所写。主要分为两部分:虚函数的定义要遵循的规则,虚函数表。 一、虚函数的定义要遵循的规则 1、如果虚函数在基类与派生类中出现,仅仅是名字相同,而形式参数不同,或者是返回类型不同,那么即使加上了virtual关键字,也是不会进行滞后联编的。 解读:派生类中 ...
分类:
编程语言 时间:
2017-09-01 22:13:51
阅读次数:
163
MIUI面试 一面: 数据结构+算法: 斐波那契数列:非递归-迭代 1MB内存。外存-100W整数。排序,O(1)-位图法 设计模式: 代理模式:OO C++: 混合编程,加什么。为什么 虚函数表 二面: 数据结构+算法: 快排 二叉树遍历 设计模式: 单例模式-多线程: 其它: 关系数据库的特性 ...
分类:
移动开发 时间:
2017-08-20 12:35:49
阅读次数:
168
虚函数是通过指针或引用调用函数时,通过虚函数表来确定调用的函数,在运行时确定。 内联函数是在编译时,将调用函数处插入内联函数的代码,省去了函数调用时的开销。 表面上看,虚函数不能为内联函数。我们在类中定义的函数都是内联函数,析构函数经常在类中定义,而析构函数又经常声明为虚函数,以前没有发现什么问题。 ...
分类:
其他好文 时间:
2017-07-27 21:27:59
阅读次数:
176