Chinaunix首页 | 论坛 | 博客
  • 博客访问: 28892
  • 博文数量: 49
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 490
  • 用 户 组: 普通用户
  • 注册时间: 2015-08-11 13:58
文章分类

全部博文(49)

文章存档

2015年(49)

我的朋友

分类: C/C++

2015-08-16 17:22:58

http://blog.163.com/wenxianliang08@126/blog/static/835832632010747850793/

提出问题:我们知道为了共享存储空间,多个对象会共享一组成员函数,编译器不会为每个对象都存储一个成员函数,而是将类的成员函数存储在某个单独的空间。(注意:逻辑上成员函数是属于对象的,因为虽然函数体相同,但是其中访问的数据成员是不同的,故为了节约空间所以才采取了这种物理实现)这种存储策略就会带来一个问题,当对象调用成员函数时,若此成员函数访问了对象的数据成员,成员函数如何知道该数据成员属于哪个对象?
解决问题:C++编译器是这样来做的,编译器为每个成员函数隐性地添加一个类的指针类型的参数(如A * this),当对象在成员函数中调用成员函数时,编译器会将该对象的首地址传递给该成员函数,这样下面的调用
A  a;
a.fun()
{
  cout<<value<<endl;
}
实际上就成了
a.fun()
{
  cout<<this->value<<endl;
}
那this指针又和静态成员函数有什么联系呢?
静态成员函数和静态数据成员的性质相似,它们都是独立于对象而属于类的。静态成员函数不属于对象,所以它没有this指针,没有了this指针那么静态成员函数也就无法访问类的非静态数据成员。
实际上,静态成员函数之所以诞生,是用来访问静态数据成员的!
阅读(443) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~