类中的虚函数,通过指针获得vtable内容,然后通过函数指针指向虚函数并调用

原创 2007年10月05日 18:43:00

#include "stdafx.h"

class A
{
 virtual void FunA(){ printf( "liangchao/r/n" ); }
 virtual void FunB(){ printf( "liangchao1/r/n" ); }
};

typedef void (*pFunA)();

int _tmain(int argc, _TCHAR* argv[])
{
 A a;
 pFunA pfunA, pfunB;

 int p = (int)(&a);
 int i = *( (int*)p );//i是指向vtable的指针
 i = *((int*)i);//i是函数FunA的地址

 int j = *( (int*)p );
 j = j +4;
 j = *((int*)j);//i是函数FunA的地址

 //void *q = (void*)(*p);
 pfunA = (void (*)())( i );
 pfunB = (void (*)())( j );
 pfunA();
 pfunB();
 return 0;
}

 

虚函数、虚指针和虚表

虚函数、虚指针和虚表 http://eriol.iteye.com/blog/1167737 关于虚函数的背景知识 用virtual关键字申明的函数叫做虚函数,虚函数肯定是类的成...
  • coolshine1234
  • coolshine1234
  • 2013年12月18日 09:49
  • 5885

解释虚函数的例子(父类子类指针函数调用注意事项)

转自http://blog.chinaunix.net/uid-20665441-id-305464.html 父类子类指针函数调用注意事项 1,如果以一个基础类指针指向一个衍生类对象(派...
  • wunghao8
  • wunghao8
  • 2015年05月12日 22:28
  • 582

C++学习笔记---利用对象、引用、指针调用虚函数

虚函数总结:               虚函数只能是类成员函数,它在基类体内部说明,目的是提供一种接口界面;          虚函数不能是友元函数(即非成员函数),也不能...
  • Weiguang_123
  • Weiguang_123
  • 2014年04月19日 21:51
  • 1687

c++多重继承下虚函数的this指针问题

今天偶然发现一个很有意思的问题,在vc编译器想检查有没有内存泄露,于是在一个类的构造函数和析构函数各下一个断点,追踪特定分配出来的一个对象实例有没有析构。却发现无论如何都没有析构,但是使用vld内存检...
  • river_mumu
  • river_mumu
  • 2013年02月25日 12:02
  • 868

虚函数、虚指针和虚表

虚函数、虚指针和虚表 关于虚函数的背景知识 1.    用virtual关键字申明的函数叫做虚函数,虚函数肯定是类的成员函数。 2.    存在虚函数的类都有一个一维的虚函数表叫做虚表。每一个类...
  • fja6502141
  • fja6502141
  • 2014年05月14日 15:48
  • 1508

C++中的类型转换

1.动态转型 dynamic_cast 动态转型是专门针对有虚函数的继承结构来的,它将基类指针转换成想要的子类指针,以做好子类操作的准备,因为可能有各个不同的子类,所以其操作可能是不同的。# in...
  • fenxinzi557
  • fenxinzi557
  • 2016年05月13日 11:52
  • 431

对象指针为NULL,为什么还是可以调用成员函数

C++中,空指针是不能够使用的,然而空对象指针有时候却能够调用成员函数。 先来看一下以下程序: #include #include using namespace std; class A { pub...
  • chenzrcd
  • chenzrcd
  • 2017年03月05日 19:53
  • 200

C/C++—— 在构造函数中调用虚函数能实现多态吗(Vptr指针初始化的过程分析)

问题引入:比如:如果我们想在父类的构造函数中调用虚函数,当定义子类对象的时候,父类的构造函数中的虚函数执行的是子类中的函数。...
  • Linux_ever
  • Linux_ever
  • 2016年04月04日 13:50
  • 913

在C++中,通过基类的引用(或指针)

在C++中,基类必须指出希望派生类重写哪些函数,定义为virtual的函数是基类期待派生类重新定义的,基类希望派生类继承的函数不能定义为虚函数。     在C++中,通过基类的引用(或指针)调用虚函...
  • u014464706
  • u014464706
  • 2014年04月01日 13:09
  • 1005

vtbl(虚函数表)与vptr(虚函数表指针)

类的虚函数表是一块连续的内存,每个内存单元中记录一个JMP指令的地址   注意的是,编译器会为每个有虚函数的类创建一个虚函数表,该虚函数表将被该类的所有对象共享。类的每个虚成员占据虚函数表中的一行。...
  • u010781856
  • u010781856
  • 2015年09月17日 21:52
  • 1109
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:类中的虚函数,通过指针获得vtable内容,然后通过函数指针指向虚函数并调用
举报原因:
原因补充:

(最多只允许输入30个字)