📄 pmf2.c
字号:
extern "C" int printf(const char *, ...);class A_table { int c;public: A_table() { c = 3;} virtual void func2(int &item) { printf("func2(%d,) c=%d\n",item,c);}};class B_table : private A_table {public: typedef void (B_table::* B_ti_fn) (int &item); B_table() { j = 0x4321;} virtual void call_fn_fn1(int &item, void *pfn1); void func1(int &item) { printf("func1(%d)\n",item);} virtual void func2(int &item) { printf("func2(%d) j=%d\n",item,j);} int j;};class foo : public A_table {public: int i; virtual ~foo(); virtual void func2(int &item) { printf("func2(%d) i=%d\n",item,i);}};foo::~foo() { i = 0;}class bar :public foo,public B_table {public: int w; virtual ~bar(); virtual void func2(int &item) { printf("func2(%d) w=%d\n",item,w);}};bar::~bar() { w = 0;}void B_table::call_fn_fn1(int &item, void *pfn1) { (this->*(*(B_ti_fn*)pfn1))(item);}B_table b;bar jar;int main() { printf("ptr to B_table=%x, ptr to A_table=%x\n",&b,(A_table*)&b); B_table::B_ti_fn z = &B_table::func1; int j = 1; jar.call_fn_fn1(j,(void *)&z); j++; z = &B_table::func2; b.call_fn_fn1(j,(void *)&z); j++; jar.call_fn_fn1(j,(void *)&z); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -