博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++——this指针
阅读量:5942 次
发布时间:2019-06-19

本文共 1101 字,大约阅读时间需要 3 分钟。

一、this指针

  1、this指针的引入

  • 应用场景1:当我们在类中定义了一个变量同时在类成员函数中定义了一个同名变量,即变量名重复时我们又想使用类中定义的变量,此时便需要this指针
  • 应用场景2:当成员函数的参数与类的成员函数名相同时,在赋值的时候要用this指针,类似场景1,即this.a=a;不能写成a=a;
  • 应用场景3:在类的非静态成员函数中返回类对象本身的时候,直接使用return *this;

  2、this指针仅存在于类的成员函数中,指向被调用函数所在类实例的地址。

  • 1 class Point 2 {  3   int x, y; 4 public: 5   Point(int a, int b) { x=a; y=b;} 6   Void MovePoint( int a, int b){ x+=a; y+=b;}//函数内部定义默认为内联函数 7 }; 8 void main( ) 9 {10    Point point1( 10,10);11    point1.MovePoint(2,2);12 }
    • 当point1调用MovePoint(2,2)函数时,即将point1对象的地址传递给了MovePoint()成员函数的默认的this指针。
    • MovePoint()函数的原型应该是 void MovePoint(Point *this,int a,int b);第一个参数是指向该类对象的一个指针,我们在定义成员函数式未看见是因为这个参数在类中是隐含的。函数的具体实现过程也可以替换成this.x+=a;this.y+=b;

  3.关于this指针的一些问题

  • this指针只能在成员函数中使用,全局函数,静态函数都不能使用this指针。。。成员函数默认的第一个参数为T *const this
    • 1 class A2 {3 public:4 int fun(int p){}5 }6 7 8 //fun 的原型在编译器看来应该是9 //int fun(A *const this,int p);
  • this指针在函数的开始前构造,在成员函数结束后清除。当调用一个类的成员函数时,编译器将类的指针作为成员函数的this参数传递进去
    • A a;a.fun(1);//编译器会将此次调用编译成:A::fun(&a,1);
  • this指针存放在何处?堆、栈、全局变量、还是其他
    • this指针会因编译器的不同而有不同的存储位置,可能是栈,可能是寄存器,也可能是全局变量。

 

转载于:https://www.cnblogs.com/southcyy/p/10262090.html

你可能感兴趣的文章
Spring学习资料之 依赖注入(一)
查看>>
安装win7提示安装程序无法创建新的系统分区和定位现有系统分区
查看>>
快递查询接口的调用与解析案例
查看>>
服务器性能优化配置建议
查看>>
oracle sql语句实现累加、累减、累乘、累除
查看>>
3D地图的定时高亮和点击事件(基于echarts)
查看>>
接口由40秒到200ms优化记录
查看>>
java 视频播放 多人及时弹幕技术 代码生成器 websocket springmvc mybatis SSM
查看>>
Activiti6.0,spring5,SSM,工作流引擎,OA
查看>>
第十三章:SpringCloud Config Client的配置
查看>>
使用 GPUImage 实现一个简单相机
查看>>
CoinWhiteBook:区块链在慈善事业中的应用
查看>>
Mac上基于Github搭建Hexo博客
查看>>
阿里云服务器ECS开放8080端口
查看>>
Spring中实现监听的方法
查看>>
使用Tooltip会出现一个问题,如果行上出现复选框
查看>>
11.03T1 DP
查看>>
P2924 [USACO08DEC]大栅栏Largest Fence
查看>>
jQuery操作table tr td
查看>>
工作总结:MFC自写排序算法(升序)
查看>>