虚函数的实现方式
来源:互联网 发布:c语言double什么意思 编辑:程序博客网 时间:2024/05/17 02:10
今天读了《深入浅出MFC》的类和对象的大解剖这一章节,终于对虚函数有了进一步的了解:
“C++编译器通过一张表,在执行期间接调用实际上预绑定的函数”。首先这张表是虚函数表,有一个指针vptr指向它,这张表是每个包含虚函数的类都会为其创建的,表中每一个表项都指向一个虚函数的地址。
比如建立了ClassTest类
class ClassTest
{
int m_data1;
int m_data2;
void mem_funtion();
virtual vfun1();
virtual vfun2();
virtual vfun3();
}
而实际上在内存中该类的实例所占的空间如下:
PS:C++类成员函数,可以看做是普通的C语言函数,并由编译器隐蔽的加上了一个this指针,所以在内存区域看不到任何有关成员函数 的信息。
每一个由此类派生出来的类,也会有虚函数表,并且我们对该对象进行调用,是通过查找虚函数表去找函数的入口地址。派生类也会继承虚函数表,如果派生类中改写虚函数,机会更改虚函数表,表中元素所指的函数的地址不在是基类的地址,而是派生类的函数地址。
class ClassTest2 : ClassTest
{
int m_data3;
void mem_funtion();
virtual vfun2();
}
在内存中的信息如下图:
所以指向ClassTest的对象调用的是ClassTest::Vfun2(); 指向ClassTest2对象调用vfun2是ClassTest2::vfun2()
- 虚函数的实现方式
- 消息函数的实现方式
- swap函数的实现方式
- C++学习一虚函数的实现方式
- C的方式实现可变参数函数
- C++ 多参函数的实现方式
- strlen函数的多种实现方式
- string函数的各种实现方式
- strlen函数的三种实现方式
- strcpy函数实现的几种方式
- C方式实现C++纯虚函数
- C++中的虚函数及其实现方式
- 通过交换虚函数表指针查看虚函数的实现方式
- 分别基于虚函数和模版方式实现的多态
- 两个c++编译器对c++对象模型和虚函数调用方式的实现
- RTTI、虚函数和虚基类的实现方式、开销分析及使用指导
- RTTI、虚函数和虚基类的实现方式、开销分析及使用指导
- RTTI、虚函数和虚基类的实现方式、开销分析及使用指导
- __stdcall 与__cdecl两种调用
- 计算机科学领域会议排名列表
- ubuntu 10.04 VPN 搭建日志
- 运行时异常和非运行时异常的区别?
- 位计数(二进制中1的个数)--读Hacker's Delight
- 虚函数的实现方式
- 一种高效的基于线性四叉树编码的多级网格索引
- 感悟
- 远程客户端 访问 ASM 实例
- 租房协议样本
- 拒绝浮躁(copy来的)
- mount/umount命令详解
- MsgWaitForMultipleObjects用法
- C++ cin与cout