学习随笔-C++ this指针

话不多说,上来先说实用的,使用情景

  1. this指针的使用情景:
    情景一:在类的非静态成员函数中返回类对象本身的时候,直接使用return *this;
    情景二:当参数与成员变量名相同时,不能写成a =a,而是this->a=a;

接着解释概念

  1. 对this指针的概念理解

    首先你得理解什么是class,class就是一种类型,类似int,char之类的,STL标准库中的string、vector就是class,只不过这是用户自己定义的类型。

    this指针举例说明:我class myclass(申明了一个myclass类),并myclass my(实例化了一个对象或者说变量my),my的this就是指向my的指针。因此,this的类型应该是myclass*,而对其的解引用*this就应该是一个myclass类型的对象(变量)。

    通常在class定义时要用到类型对象自身时,因为此时还不知道变量名(为了通用也不可能固定实际的变量名),就用this这样的指针来使用变量自身。

  2. this指针的性质介绍
    一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。

    this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对对象本身的地址作为一个隐含参数传递给函数。即,就算你没有写this,编译器在编译的时候也是加上this的,它作为非静态成员函数的隐含形参,对各成员的访问均通过thi进行。

#include<iostream.h>
class Point
{ 
  int x, y;
public:
  Point(int a, int b) { x=a; y=b;}
  Void MovePoint( int a, int b){ x+=a; y+=b;}
  Void print(){ cout<<"x="<<x<<"y="<<y<<endl;}
};
void main( )
{
   Point point1( 10,10);
   point1.MovePoint(2,2);
   point1.print( );
}

示例中,对象point1调用MovePoint(2,2)函数时,就将point1对象的地址传递给了this指针。

MovePoint函数的原型应该是void MovePoint(Point *this,int a,int b);我们在定义成员函数时没看见是因为这个参数在类中是隐含的。这样point1的地址传递给了this,所以在MovePoint函数中便显式的写成:

void MovePoint(int a, int b) { this->x +=a; this-> y+= b;}
即可以知道,point1调用该函数后,也就是point1的数据成员被调用并更新了值。

即该函数过程可写成 point1.x+= a; point1. y + = b;

参考总结于:https://www.cnblogs.com/liushui-sky/p/5802981.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值