码迷,mamicode.com
首页 > 其他好文 > 详细

虚函数表

时间:2016-06-11 17:11:00      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:

//#include <vector>
//#include <bitset>
#include <stdio.h>
//#include <string.h>
//#include<malloc.h>
//#include<fstream>

//#include <stdexcept>
//#include <exception>
#include "t.h"
//#include <list>


//常量,变量,指针,引用。const。

//using namespace std;
//常量,只读变量。define
//void * add(int a,int b);

#include <iostream>
//#include <set>
using namespace std;

class Base {
public:
int a;
virtual void f() { cout << "Base::f" << endl; }
virtual void g() { cout << "Base::g" << endl; }
virtual void h() { cout << "Base::h" << endl; }
Base():a(4){}


};


class Base2 {
public:
int a;
virtual void f() { cout << "Base2::f" << endl; }
virtual void g1() { cout << "Base2::g1" << endl; }
virtual void h() { cout << "Base2::h" << endl; }
Base2():a(3){}


};


class Derive : public Base,public Base2{
public:
virtual void f() { cout << "Derive::f" << endl; }
virtual void e(){};
};

 

int main (int argc,char *argv[])
{
typedef void(*Fun)(void);

Base b;

Fun pFun = NULL;

printf( "Base.b add:%0x, value:%d\n" , &(b.a),*&(b.a));
printf( "虚函数表 - 指针:%0x\n" , &b );
printf( "虚函数表 — 第一个函数地址指针:%0x\n" , *(int *)(&b) );
printf( "虚函数表 — 第一个函数地址:%0x\n" , *(int *)*(int *)(&b) );
printf( "虚函数表 — 第二个函数地址:%0x\n" , *(int *)(*(int *)(&b)+4) );
printf( "虚函数表 — 第三个函数地址:%0x\n" , *(int *)(*(int *)(&b)+8) );
printf( "虚函数表 — 第四个函数地址:%0x\n\n" , *(int *)(*(int *)(&b)+12) );

 

cout<<"直接调用第一个函数的地址来测试是否正确:"<<endl;
pFun = (Fun) *(int *)*(int *)(&b);
pFun();

Derive d;

printf( "\n虚函数表 — 第一个函数地址:%0x\n" , *(int *)*(int *)(&d) );
printf( "虚函数表 — 第二个函数地址:%0x\n" , *(int *)(*(int *)(&d)+4) );
printf( "虚函数表 — 第三个函数地址:%0x\n" , *(int *)(*(int *)(&d)+8) );
printf( "虚函数表 — 第四个函数地址:%0x\n" , *(int *)(*(int *)(&d)+12) );
printf( "虚函数表 — 第五个函数地址:%0x\n\n" , *(int *)(*(int *)(&d)+16) );

printf( "\n虚函数表 — 第一个函数地址:%0x\n" , *(int *)*(int *) (int)&d+8 );//我的编译器会把第一个数据插到2个虚表中间。


d.g1();


return 0;
}

 

虚函数表

标签:

原文地址:http://www.cnblogs.com/lsfv/p/5575442.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!