更新时间:2016-02-27 22:57:52浏览次数:1+次
class base
{
virtual void print( void){
cout << "这是base类" << endl;
}
virtual void print2( void){
cout << "base" << endl;
}
};
然后我们可以通过指针来访问虚函数表中的函数
typedef void(* fun)(void );
base b1 ;
cout << "虚函数表地址" << (int *)(&b1 ) << endl;
cout << "虚函数表的第一个函数地址" << (int*)*(( int*)(&b1 ))<< endl ;
fun pfun = (fun)*(( int*)*((int *)(&b1)));
pfun();
getchar();
class child :public base
{
virtual void print( void){
cout << "这是子类" << endl;
}
virtual void print3( void){
cout << "printf3" << endl;
}
};
typedef void(* fun)(void );
base b1 ;
child c1 ;
cout << "虚函数表地址" << (int *)(&b1 ) << endl;
cout << "虚函数表的第一个函数地址" << (int*)*(( int*)(&b1 ))<< endl ;
fun pfun = (fun)*(( int*)*((int *)(&c1)));
pfun();
fun pfun2 = (fun)*(( int*)*((int *)(&c1))+ 1);
pfun2();
fun pfun3 = (fun)*(( int*)*((int *)(&c1))+ 2);
pfun3();
相关资讯