首先,我们要理解,引用(&)是什么意思?
&在c语言中可以是取地址的意思。
但在C++中,它有另外一种用法,即引用,这是在C++中特有的,对引用最通俗简单的理解就是取别名!我们做个简单尝试,看以下代码。
#include
using namespace std;
int main
{
int a=3;
int &b=a;
cout<<b; //输出 3;
b=1; //这条语句其实就相当于语句a=1;
cout<<a<<endl; //输出1 (验证了上面的猜想)
/*继续尝试/
cout<<&a<
//取地址时具体是什么地址不重要,重要的是可以看到结论a和b的地址是一样的!嘿嘿。
通过上面的尝试,我们得出了一个重要结论,引用(&)本质上就是取别名,对于 int& b=a 而言,b是对a的一个引用, 只要把对b所进行的所有操作想象成对a进行的所有操作就就行了。
其次,我们来理解在C++中重载运算符+时为什么返回的是引用(&);
class A{
public:
int a;
A& operator+(A c) {
this->a= c.a;
return *this;
}
}
上面是类A。
1.在讲解引用之前,容许我讲解一下this的意思。
①对于代码中的类A,如果创建出一个对象 A p1, 那么在A内部,this指针是指向p1这个对象的,比如说this->a,其实指的就是p1里面的成员数据a,所以记住this就是指向目前所在对象的一个指针。(为什么要引出this这个东西呢,这就是第二点要讲的了)
②我们看到上面的代码中的重载运算符+的函数中返回了this,由①知this是一个指针指向p1,是解引用的意思,所以this就指的是p1,比如说*this.a指的也是p1中的数据成员a。