this指针

来源:互联网 发布:php小说源码 编辑:程序博客网 时间:2024/06/05 15:49

建立一个对象时,系统为该对象分配内存栈区空间(位于栈区内),用于存储该对象的非静态数据成员。而该类的成员函数则存于另外的代码分区内。这些成员函数一般都用于访问(读写)该类各对象的各个数据成员。试问:各成员函数怎么知道这些非静态数据成员的地址,也即各对象的地址?原来,每个对象的地址都存放在它自己的this指针内。而每个成员函数的参数表中都隐含着这个指针。

应该指出,this指针是指向一个对象的,所以它能指向该对象的非静态数据成员。

由于对象的this指针不属于对象本身,因此使用sizeof宏所得的对象长度中并不包括this指针在内。但每次调用非静态成员函数时,this指针都作为第一个隐式参数传递给对象(通过编译器)。

#include<iostream>using namespace std;class Test{int x;public:Test(int a){x=a;}void print() const;};void Test::print() const{cout<<"x="<<x;cout<<"\nthis->x="<<this->x<<endl;cout<<"(*this).x="<<(*this).x<<endl;}int main(){Test obj(12);obj.print();}

x=12
this->x=12
(*this).x=12


--------------------------------
Process exited after 0.3203 seconds with return value 0
请按任意键继续. . .

0 0
原创粉丝点击