【基础】通过取地址调用虚函数的两种方式--C++源代码(VS2008)

来源:互联网 发布:moto 860联通网络 编辑:程序博客网 时间:2024/05/16 00:58
#include <iostream>
using namespace std;


class Base
{
public:
virtual void func_1()
{
cout<<"it is Base::func_1"<<endl;
}
virtual void func_2()
{
cout<<"it is Base::func_2"<<endl;
}
};
/* 直接调用对应类中的函数 */
typedef void (Base::*FUNC_1)();
/* 直接调用对应的函数 */
typedef void (*FUNC_2)();


int main()
{
Base b;
FUNC_1 pfunc_1 = &Base::func_1;
(b.*pfunc_1)();


FUNC_2 pfunc_2 = (FUNC_2)*(long*)*(long*)(&b);
pfunc_2();
FUNC_2 pfunc_2_1 = (FUNC_2)*((long*)*(long*)(&b)+1);
pfunc_2_1();


long** pfunc = (long**)(&b);
((FUNC_2)*(*pfunc))();


system("pause");
return 0;
}
阅读全文
0 0