this指针

先来看看这段代码

#include<iostream>
using namespace std ;     //例6-5
class  Simple
{   int  x, y ;
  public :
     void setXY ( int a, int b) { x = a ;  y = b ; }
     void printXY() { cout << x << "," << y << endl ; } ;
} ;
int main()
{ Simple obj1, obj2, obj3 ; 
   obj1 . setXY ( 10, 15 ) ;
   obj1 . printXY () ;
   obj2 . setXY ( 20, 25 ) ;
   obj2 . printXY () ;
   obj3 . setXY ( 30, 35 ) ;
   obj3 . printXY () ;
}

问题来了,根据上一篇的学习,我们都知道在类中只会给数据类型分配内存,普通成员函数是不分配内存的,那么成员函数是怎么知道我们要修改的是哪个对象呢?

实际上,每个成员函数后面都会有一个this指针,来指向目标obj

例如void setXY(int a ,int b);

实际上可以这样写

void setXY ( int a, int b, Simple * const this ) { this->x = a ;  this->y = b ; }

意思就是,在每个成员函数后面,编译器会自动给你添加this指针(不可以直接写出来,会报错的),来指向操作对象

Simple*const this 本质上是一个指针常量(指针常量只指向一个固定的地址,不能再指向其它地址。)调用函数的时候,this指针会被自动赋上&obj

当对象要调用的时候,会把对象的地址赋给this指针,例如

obj1 . setXY ( 10, 15, &obj1 ) ;

顺便复习一下指针常量和常量指针

const int* a;//常量指针,不可以用*a去修改数据的值,通过其他方法可以修改数据,可以更换指针指向的对象
int*const b;//指针常量,一旦赋值指向不可改变,而指向的数据是可修改的

this指针注意点(摘自https://www.cnblogs.com/yuwanxian/p/10988736.html)

1.C++中this关键字是一个指向对象自己的一个常量指针,不能给this赋值;

2.只有成员函数才有this指针,友元函数不是类的成员函数,没有this指针;

3.同样静态函数也是没有this指针的,静态函数如同静态变量一样,不属于具体的哪一个对象;

4.this指针作用域在类成员函数内部,在类外也无法获取;

5.this指针并不是对象的一部分,this指针所占的内存大小是不会反应在sizeof操作符上的。

posted on 2020-03-24 15:52  Kevin_Weng  阅读(232)  评论(0编辑  收藏  举报