类中的虚函数,通过指针获得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;
}

 
版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

通过函数指针使用虚函数表中的函数

虚函数是实现多态是通过维护一张虚函数表来实现的。在类对象的头4个字节中,有一个指向这个虚函数表的指针,我们称为Vptr;写一个类AAclass AA{ public: virtual void...

通过函数指针调用函数

说明: 指针可以不但可以指向一个整形,浮点型,字符型,字符串型的变量,也可以指向相应的数组,而且还可以指向一个函数。 一个函数在编译的时候会被分配给一个入口地址。这个函数入口地址称为函数的指针。可以用...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

指向函数的指针(函数指针)和指针函数

在C语言中,一碰到指针,人就比较容易犯晕,尤其是我,虽然知道指针神话了C语言,但也深知指针的麻烦。      今天看书看到指向函数的指针,顿时又陷入自我混沌状态,这是本着逃避心理的混沌!但是总是要慢慢...

获取虚函数指针

先还是看看下面的代码:  #include using namespace std;   class A { private:          int a;  ...

通过函数指针调用static

 所谓函数指针就是一个指向函数的指针,也就是说我们定义一个函数指针量后,这个变量所在的空间要保存一个函数的地址。那么函数指针除了作为回调函数的传参之外还有什么作用呢?这里我们就结合staitc的...

怎样获得虚函数的指针

先请看下面的简单的例子程序: #include using namespace std;   class A { private:          int a;  ...

虚函数与虚指针

class A{ public: virtual void method1(){ } private: int a; int b; }; class B: public A{ pub...

虚函数表指针,虚函数表

虚函数表 对C++ 了解的人都应该知道虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。简称为V-Table。 在这个表中,主要是一个类的虚函数的地...

通过线程来谈指针函数和函数指针

线程中遇到pthread_create函数第三个参数 void *(*start_routine)(void *) 这个参数代表一个指针,这个指针指向的函数必须满足以下条件: 1、函数参数只有一个...

C++虚函数指针虚函数表

C++的多态可以分为静态多态和动态多态。函数重载和运算符重载实现的多态属于静态多态,而通过虚函数可以实现动态多态。实现函数的动态联编其本质核心则是虚表指针与虚函数表。   1. 虚函数与纯虚函数区别 ...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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