类成员函数访问问题

Roy_Smiling 2011-08-28 08:40:27
类里面的成员函数被编译器编译后都是函数放在代码区里面。
那么怎么保证类的成员函数只能被该类的实例对象访问。而不能像通常的函数调用一样。

如:
class A
{
private:int a;
public: void put{ cout<<a<<endl;}
}

编译器编译后有一个函数:void put(A *this);
怎么保证这个函数只能被A类对象访问,而不能像通常的函数调用一样访问。(求编译器实现机制)
...全文
141 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
tony2278 2011-08-29
  • 打赏
  • 举报
回复
编程跟学电路有什么关系?
没什么关系!

如果你是嵌入式软件,就可以了解一下硬件!
上位机软件根本不需要学电路!
iamnobody 2011-08-29
  • 打赏
  • 举报
回复
后面的是开玩笑的,学下汇编有好处不假
iamnobody 2011-08-29
  • 打赏
  • 举报
回复
如果你好奇的话,就会想这是怎么实现的,CPU,里面不就是电路吗?
Roy_Smiling 2011-08-29
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 mingliang1212 的回复:]

我看你学得差不多的时候就学一下汇编吧,汇编不用学太好,能看懂就行,这样才能直接看反汇编,不用问人了,当然如果你还想再深入了解,学数字电路,还想深入学模拟电路,还要更底层就学电路吧。
[/Quote]
编程跟学电路有什么关系
iamnobody 2011-08-29
  • 打赏
  • 举报
回复
我看你学得差不多的时候就学一下汇编吧,汇编不用学太好,能看懂就行,这样才能直接看反汇编,不用问人了,当然如果你还想再深入了解,学数字电路,还想深入学模拟电路,还要更底层就学电路吧。
iamnobody 2011-08-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 roy_smiling 的回复:]
引用 5 楼 luciferisnotsatan 的回复:

引用 2 楼 pengzhixi 的回复:

访问性是针对类的,不是针对对象的。你理解完全错误了。

++

而且访问限制是针对编译时的,编译后没有这种限制。只有内存访问权限。

我想知道编译器是怎么实现这种访问限制的?
[/Quote]
编译器实际上 类似这样翻译的
void A::put(A* this);
只要加上类名不就知道是属于谁的函数了吗?
Roy_Smiling 2011-08-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 luciferisnotsatan 的回复:]

引用 2 楼 pengzhixi 的回复:

访问性是针对类的,不是针对对象的。你理解完全错误了。

++

而且访问限制是针对编译时的,编译后没有这种限制。只有内存访问权限。
[/Quote]
我想知道编译器是怎么实现这种访问限制的?
luciferisnotsatan 2011-08-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 pengzhixi 的回复:]

访问性是针对类的,不是针对对象的。你理解完全错误了。
[/Quote]
++

而且访问限制是针对编译时的,编译后没有这种限制。只有内存访问权限。
grefen 2011-08-28
  • 打赏
  • 举报
回复
上面笔误,应该是cout<<a->a<<endl;
grefen 2011-08-28
  • 打赏
  • 举报
回复

A x;
x.put();
编译后大概应该是这样的:
A x;
put(&x);
另外成员函数一般内部差不多是这样的:
void put(A* a){ //这里的参数是编译器放的,就是传说中的this指针;
cout<<a.a<<endl;
}

pengzhixi 2011-08-28
  • 打赏
  • 举报
回复
访问性是针对类的,不是针对对象的。你理解完全错误了。
羽飞 2011-08-28
  • 打赏
  • 举报
回复
每次不都要传一个class A类型相关的参数吗
如果参数不对不是不能调用这个函数

64,639

社区成员

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

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