关于类成员函数地址!

hustdaiwei 2006-09-04 05:53:49
假设有一个类
class C1
{
public:
C1()
{
printf("In C1\n");
DispVFT((DWORD*)this);
}
virtual void F1(){}
};
请问C1::F1获得的使函数F1的地址吗?
...全文
294 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
houdy 2006-09-04
  • 打赏
  • 举报
回复
class myClass {
public:
static void sFunction();
void mFunction();
virtual void vFunction();
}
对于这个类:
1.静态函数sFunction(). 静态函数和普通的全局函数相似,只不过被封装在myClass这个类域内,它的指针类型/赋值/调用分别为:
typedef void (myClass::*StaticFunctionPTR)();
StaticFunctionPTR pStaticFunc = &myClass::sFunction;
pStaticFunc();
2.普通成员函数.普通成员函数也被封装在myClass类域内,同时还有隐式的参数this.所以它的指针类型/赋值/调用分别为:
typedef void (myClass::*MemberFunctionPTR)();
MemberFunctionPTR pMemberFunc = &myClass::mFunction;
myClass myObj;
(myObj.*pMemberFunc)();
3.虚函数.虚函数不能直接取地址,因为虚函数地址存放在虚表中。我们要先得到虚函数表的地址,然后在索引到具体的虚函数。
希望以上的分析能对你有所帮助:)
wf520pb 2006-09-04
  • 打赏
  • 举报
回复
hustdaiwei() ( ) 信誉:100 Blog 2006-09-04 18:07:00 得分: 0

试了一下,fnF1和C1::F1的地址好像不一样啊。

----------------------------------------------------------------

变量地址当然不一样,值是一样的嘛。
OOPhaisky 2006-09-04
  • 打赏
  • 举报
回复
不是,应该是一个类似于结构体的东西,具体的根编译器实现有关,楼主可以看看《inside the c++ object model》,里面有详细介绍。
hustdaiwei 2006-09-04
  • 打赏
  • 举报
回复
class C1
{
public:
C1()
{
printf("In C1\n");
// DispVFT((DWORD*)this);
}
void F1(){int a = 1;}
};



void main()
{

C1 c1;
typedef void (C1::*pF1)();
pF1 fnF1 = &C1::F1;
}
试了一下,fnF1和C1::F1的地址好像不一样啊。
hustdaiwei 2006-09-04
  • 打赏
  • 举报
回复
只有这么多分了!

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧