通过交换虚函数表指针查看虚函数的实现方式
来源:互联网 发布:ovd后缀名是什么软件 编辑:程序博客网 时间:2024/06/06 01:19
#include <iostream>using namespace std;class A{public:virtual void Func1(){cout << "class A Func1" << endl;}virtual void Func2(){cout << "class A Func2" << endl;}};class B{public:virtual void Func1(){cout << "class B Func1" << endl;}void Func2(){cout << "class B Func2" << endl;}virtual void Func3(){cout << "class B Func3" << endl;}};int _tmain(int argc, _TCHAR* argv[]){A *pa = new A;B *pb = new B;//交换AB虚函数表指针int v_ptr = *((int*)pa);*((int*)pa) = *((int*)pb);*((int*)pb) = v_ptr;pa->Func1();pa->Func2();pb->Func1();pb->Func2();pb->Func3();return 0;}
输出结果:
class B Func1
class B Func3
class A Func1
class B Func2
class A Func2
通过输出结果可以看出,编译器为每一个虚函数建立了一个索引项。如当pa->Func1();执行时,直接调用第0项对应的函数地址即可。
- 通过交换虚函数表指针查看虚函数的实现方式
- C通过函数交换指针的值
- 通过void指针实现跨类型变量交换函数
- 练习2: 通过交换函数的实现,学习指针的用法。
- 函数交换,通过指针访问地址
- 通过函数指针使用虚函数表中的函数
- 交换函数的实现
- 通过指针引用虚函数
- 通过虚函数指针绕过虚函数的保护机制
- 用函数和指针实现两个数的交换
- 用函数实现两个数的交换(指针)
- 通过调用函数实现a与b的交换
- 指针与非指针的交换函数
- 虚函数的实现方式
- 练习3: 通过打印指针,加深对交换函数和指针的理解。
- 指针--交换函数
- 通过函数给指针赋值(二)交换两个变量的值
- C语言指针-------通过调用函数,完成两个数值的交换
- Eclipse+Maven配置
- Using the Support Library
- Creating a Fragment
- ADO.NET概述(第十六课)
- Building a Flexible UI
- 通过交换虚函数表指针查看虚函数的实现方式
- 使用LINQ ToSql(第十七课)
- IOS之计时器
- 实体数据模型(第十八课)
- STM32F051R8芯片介绍
- Exchange Server 2013 Get-HealthSet
- hdu 2203
- 使用WCF数据访问服务(第十九课)
- 《C语言现代方法》第一章编程题