VC2005通过编译,由于虚函数表的问题,依赖性很大。
其实这没有任何用处,只是在使用多了一个选择而已。
带参数的虚函数注意第一个参数为对象指针,静态的不用关心太多。
至于private 和protected非虚函数和非静态的,不知道怎么取他们的地址,所以没有写。
直接操作成员变量的
如果有多个成员变量
注意变量的对齐问题,
我不再举例:
有点复杂^_^。
#include "stdafx.h"
#include <string>
#include <algorithm>
#include <iostream>
typedef void (_cdecl *funcall)(int );
typedef void (_cdecl *funcall1)(void* ,int );
typedef void (_cdecl *funcall2)(void* );
funcall g_call;
funcall2 g_call1;
void funcallinstance()
{
g_call(3);
}
class aa
{
public:
aa()
{
//callfunc(aat);
g_call=aat;
//g_call1=(funcall2)&aa::fun1;
}
private :
static void _cdecl aat(int a)
{
int b=a;
std::cout<<"aa";
}
virtual void _cdecl fun(int a)
{
int b=a;
fuckmember=b;
std::cout<<"virtual";
}
void _cdecl fun1()
{
std::cout<<"common";
}
int fuckmember;
};
int main()
{
aa attt;
int* pthis=(int*)&attt;
int* funtable=(int*)pthis[0];
int & member=pthis[1];
member=10;
funcall1 virfun=(funcall1)funtable[0];
virfun(&attt,5);
funcallinstance();
///g_call1(&attt);
}