首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

小弟有C语言小程序一个,其中一句话不懂,请问上各位

2013-01-08 
小弟有C语言小程序一个,其中一句话不懂,请教下各位大虾.#include cstdio#include iostream#include c

小弟有C语言小程序一个,其中一句话不懂,请教下各位大虾.


#include <cstdio>
#include <iostream>
#include <cstdlib>

using namespace std;

#define AEEVTBL(iname) iname##Vtbl

#define AEEINTERFACE(iname) \
typedef struct AEEVTBL(iname) AEEVTBL(iname); \
struct AEEVTBL(iname)

#define AEEGETVTBL(p, iname) (*((AEEVTBL(iname)**)p))

//声明虚函数列表
AEEINTERFACE(APP)
{
void (*pf)();
};

/*
 tydef struct APPVtbl APPVtbl;
 struct APPVtbl
 {
void (*pf)();
 }
 */

typedef struct APP
{
AEEVTBL(APP) *pvt;
}APP;

/*
  tydef struct APP
  {
APPVtbl *pvt;
  }
 */


#define FUN(p) AEEGETVTBL(p, APP)->pf()

/*
  (*((AEEVTBL(APP)**)p))->pf()
  (*(APPVtbl**)p))->pf()
 */

void f()
{
cout<<"f() is ok"<<endl;
}

void g()
{
cout<<"g() is ok"<<endl;
}

//函数列表1
AEEVTBL(APP) vable = { f };

//函数列表2
AEEVTBL(APP) vable2 = { g };

int main(int argc, char* argv[])
{

APP* pMe = (APP*)malloc(sizeof(APP));

pMe->pvt = &vable;
FUN(pMe);

pMe->pvt = &vable2;
FUN(pMe);
/*
 FUN(pMe) 转换后为 (*((APPVtbl**)pMe))->pf()
 请问下 (*((APPVtbl**)pMe))  是什么 意思?
 */

free(pMe);

return 0;
}



以上代码中
有下面的一句
FUN(pMe);
          
 FUN(pMe) 展开后为 (*((APPVtbl**)pMe))->pf()
 请问下 (*((APPVtbl**)pMe))  是什么 意思?
          为什么不可以用 (APPVtbl*)pMe->pf()来访问pf()函数

          还有就是总感觉 (APPVtbl*)pMe->pf() 与 (*((APPVtbl**)pMe))相同?

[解决办法]
完全不相同,好好体会转型
[解决办法]
(APPVtbl*)pMe 与 (*((APPVtbl**)pMe)) 的区别在于少了一次解引用.
如果 (APPVtbl*)pMe 是指针, (*((APPVtbl**)pMe)) 就是指针的指针.

热点排行
Bad Request.