一.什么是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的所有数据,然后再去返回这个临时复制品。
所以可以看出来它(返回引用)的好处:
①节省开销(当对象很大时候,不用再去调用拷贝构造函数复制那么多值了)
②可以进行链式调用