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);
}