类成员存储问题

bitxinhai 2008-09-07 12:30:04
例如一个类
class A
{
public:
void f()
{

}
public:
char c;
private:
int a,b;
};
用其声明一个对象 A a;
那么这个类的成员函数f()存储到哪里了??
对象怎么通过什么机制访问到成员函数的??
对象并没有成员函数的指针啊??
谢谢!!!
...全文
119 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
daveprote 2009-03-30
  • 打赏
  • 举报
回复
C#中的类成员在内存中是如何存储的?
richbirdandy 2008-09-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bitxinhai 的回复:]
int main()
{
A a;
a.f();//在这里调用f的时候,怎么定位到f的地址的呢????

return 0;
}
[/Quote]
编译器会保存类的成员函数的地址 在所谓的代码区

只要知道a的类型 就可以调用

bitxinhai 2008-09-07
  • 打赏
  • 举报
回复
int main()
{
A a;
a.f();//在这里调用f的时候,怎么定位到f的地址的呢????

return 0;
}

xqls_xqls 2008-09-07
  • 打赏
  • 举报
回复
路过,
wangdeqie 2008-09-07
  • 打赏
  • 举报
回复

//这么用
#include <iostream.h>
#include <malloc.h>

class A
{
public:
void f()
{
cout<<"A::f()"<<endl;
}
public:
char c;
private:
int a,b;
};



int main()
{
A a;
a.f();

return 0;
}
xkyx_cn 2008-09-07
  • 打赏
  • 举报
回复
如果有函数体,而且没有被内联的话,会像C里的函数一样存在代码区,C++编译器的名字重构(name mangling)与C有所不同,具体情况你可以用google搜索一下
wjb_yd 2008-09-07
  • 打赏
  • 举报
回复
深度探索c++对象模型
zwspider 2008-09-07
  • 打赏
  • 举报
回复
补充一点:更详细的内容请参看inside the c++ object model (chapter 4 - the semantics of function)
zwspider 2008-09-07
  • 打赏
  • 举报
回复
其实问题比较简单:
其实编译器内部已经将nonstatic member function转换为对等的nonmember function.

例如:
class A
{
public:
void f(int ii) {ivalue = ii;}
private:
int ivalue;
}

对于编译器:
A::f可能被转化为:
void A_f(A* const this, int ii)
{
this->iValue = ii;
}


64,654

社区成员

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

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