c++中this指针的作用

       this 指针是一个隐含指针。系统要设计this指针是因为“类”这个数据和函数的集合类型,变化太多,类的成员函数在内存里只有一份,每个成员函数都有一个隐含的this指针,因为一个类可以定义无数多的对象实例,内存内不同的只是每个对象的属性值,也就是说每个对象的成员变量的值不同而已,成员函数不占用类定义的对象的存储空间;无论哪个对象实例调用成员函数,实例就把自己的首地址传给该成员函数的this指针。这时候的this指针,它就相当于段地址,系统知道,它指向哪个成员变量时的偏移量。指向元素时是段地址和偏移地址的和;

例如定义了一个类Cdog

class Cdog        //定义一个dog类;
{
public:
  int iAge;       //年龄
  int iWeight;    //重量
  int  get_age()
  {
  return iAge;//对于每一个实例,指针的值是不同的;
  }
};

其中有一个成员函数 int get_age;取得年龄的数值;

在主程序中调用成员函数:

int _tmain(int argc, _TCHAR* argv[])
{
Cdog dog1,dog2;
dog1.iAge=5;
int age;
age=dog1.get_age();
cout<<"the age is :"<<age<<endl;
return 0;
}

第6行 age = dog1.get_age();调用成员函数int  get_age(),此时成员函数内部隐含的this指针指向了dog1这个实例的首地址因为iAge是对象的第一个成员变量,所以这时候不用偏移;如果要对iWeight操作,系统会加上一个int的偏移地址,不同的系统int的字节数不同;

          其实在程序的第3行,用类名Cdog定义实例dog1和dog2的时候,编译器已经给实例dog1分配了内存,这个内存的首地址,编译器是知道的;在第6行age = dog1.get_age(); dog1对象调用成员函数get_age()时,编译程序先将实例dog1的地址赋给 this 指针,在this指针的指引下访问dog1实例的age元素,获得它的值,然后又通过return age传出;每次成员函数存取数据成员的值时,隐含使用 this 指针。最大的原因是,类内各个元素占用的内存空间不一样,

系统没法为程序员提供一个指针用来指向各个元素,防止程序员用指针++或者指针+=操作指针;

所以,系统用this指针后加元素的方式来引用元素;
        this 指针被隐含地声明为: ClassName const this,这意味着不能给 this 指针直接赋值;

其实在指针指向元素的时候,指针的值就被系统自动的改变了,相当于给指针赋值操作; 
由于 this 并不是一个普通变量,是系统隐含提供给程序员使用的。所以,不能取得 this 的地址。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值