C++this指针

1 阅读1分钟

一.什么是this指针

试想,当一个类定义多个对象,多个对象分别调用成员函数时候,成员函数又或者是里边地数据成员怎么去区分每个对象呢?
这时候就用到了this指针,隐式地去分辨。

Class Date
{
private:
   int year,month,day;
public:
   Date(int year=2026,int month=5,int day=28)//构造函数
   { 
     this->year=year;//等号左边的this->year是数据成员,右边是传进来的参数
     (*this).month=month;
     this->day=day;
   }
   void show()//const Date *this=&d1;
   {
   cout<<year<<"."<<month<<"."<<day<<endl;
   //相当于cout<<this->year<<"."<<this->month<<"."<<this->day<<endl;
   }
   Date& fun()//引用返回,而非值返回
   {
    return *this
   }
};
int main()
{
   Date d1(2022,9,29),d2(2025,9,29);
   d1.show();
   (d1.fun()).show();//链式调用
   return 0;
}

this指针特点
①它是一个局部变量,局部于某个对象
②它是一个const指针,不能修改或者给它赋值

二.this指针地两种常见用途

1.用this区分成员或者是非成员

见上文代码的 this->year=year

2.类的方法需要返回当前对象的引用

这样可以进行链式调用,因为return *this,这个返回值还是d1本身,所以可以继续进行连续调用。
但如果是下面这种情况:

Date fun()
{
 return *this;
}

这种情况是值返回,返回类型是Date,而不是Date&,那么执行d1.fun()时候,编译器会复制一个全新的Date类对象,来去拷贝d1的所有数据,然后再去返回这个临时复制品。 所以可以看出来它(返回引用)的好处:
①节省开销(当对象很大时候,不用再去调用拷贝构造函数复制那么多值了)
②可以进行链式调用