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) 编辑 收藏 举报