通过交换虚函数表指针查看虚函数的实现方式

来源:互联网 发布: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项对应的函数地址即可。

原创粉丝点击