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) |