标签:
C++ 虚函数表解析 - 陈皓专栏 【空谷幽兰,心如皓月】 - 博客频道 - CSDN.NET
http://blog.csdn.net/haoel/article/details/1948051/
#include<iostream>
using namespace std;
//基类
class Base {
public:
virtual void f() { cout << "Base::f" << endl; }
virtual void g() { cout << "Base::g" << endl; }
virtual void h() { cout << "Base::h" << endl; }
};
//无虚函数覆盖的子类
class derive:public Base
{
virtual void f1() { cout << "derive::f1" << endl; }
virtual void g1() { cout << "derive::g1" << endl; }
virtual void h1() { cout << "derive::h1" << endl; }
};
//有虚函数覆盖
class derive2:public Base
{
virtual void f() { cout << "derive2::f" << endl; }
virtual void g() { cout << "derive2::g" << endl; }
virtual void h() { cout << "derive2::h" << endl; }
};
int main()
{
//基类里虚函数
/*
typedef void(*Fun)(void);//表示定义一个函数指针类型
Base b;
Fun pFun = NULL;
cout << "虚函数表地址:" << (int*)(&b) << endl;
cout << "虚函数表 — 第一个函数地址:" << (int*)*(int*)(&b) << endl;
// Invoke the first virtual function
pFun = (Fun)*((int*)*(int*)(&b));//加上后面的(Fun)*是将int*强制转换为函数指针
pFun();
*/
//无虚函数覆盖
/*
typedef void(*Fun)(void);
derive c;
Fun pFun=NULL;
cout<<(int*)*(int*)(&c)+0<<endl;
pFun=(Fun)*((int*)*(int*)(&c)+0);
pFun();
cout<<(int*)*(int*)(&c)+1<<endl;
pFun=(Fun)*((int*)*(int*)(&c)+1);
pFun();
cout<<(int*)*(int*)(&c)+2<<endl;
pFun=(Fun)*((int*)*(int*)(&c)+2);
pFun();
cout<<(int*)*(int*)(&c)+3<<endl;
pFun=(Fun)*((int*)*(int*)(&c)+3);
pFun();
*/
//
system("pause");
return 1;
}
标签:
原文地址:http://www.cnblogs.com/yanliang12138/p/4417183.html