C++ this

1.概要

在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址。this 指针是所有成员函数的隐含参数。因此,在成员函数内部,它可以用来指向调用对象。

友元函数没有 this 指针,因为友元不是类的成员。只有成员函数才有 this 指针。

下面的实例有助于更好地理解 this 指针的概念:

#include <iostream>
 
using namespace std;
 
class Box
{
   public:
      // 构造函数定义
      Box(double l=2.0, double b=2.0, double h=2.0)
      {
         cout <<"Constructor called." << endl;
         length = l;
         breadth = b;
         height = h;
      }
      double Volume()
      {
         return length * breadth * height;
      }
      int compare(Box box)
      {
         return this->Volume() > box.Volume();
      }
   private:
      double length;     // Length of a box
      double breadth;    // Breadth of a box
      double height;     // Height of a box
};
 
int main(void)
{
   Box Box1(3.3, 1.2, 1.5);    // Declare box1
   Box Box2(8.5, 6.0, 2.0);    // Declare box2
 
   if(Box1.compare(Box2))
   {
      cout << "Box2 is smaller than Box1" <<endl;
   }
   else
   {
      cout << "Box2 is equal to or larger than Box1" <<endl;
   }
   return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

Constructor called.
Constructor called.
Box2 is equal to or larger than Box1

this指针的使用:

一种情况就是,在类的非静态成员函数中返回类对象本身的时候,直接使用 return *this;另外一种情况是当参数与成员变量名相同时,如this->n = n (不能写成n = n)。

2.return this和return *this

return this返回当前对象的地址(指向当前对象的指针);
return *this返回的是当前对象的克隆或者本身(若返回类型为A, 则是克隆, 若返回类型为A&, 则是本身 );

return this示例:

#include <iostream>  
using namespace std;  

class A  
{  
public:  
    int x;  
    A* get()  
    {  
        return this;  
    }  
};  

int main()  
{  
    A a;  
    a.x = 4;  
  
    if(&a == a.get())  
    {  
        cout << "yes" << endl;  
    }  
    else  
    {  
        cout << "no" << endl;  
    }  
  
    return 0;  
}  

//输出:yes

return *this示例:

#include <iostream>  
using namespace std;  

class A  
{  
public:  
    int x;  
    A get()  
    {  
        return *this; //返回当前对象的拷贝  
    }  
    A &get2()
    {
    	return *this;  //返回当前对象
    }
};  

int main()  
{  
    A a;  
    a.x = 4;  
  
    if(a.x == a.get().x)  
    {  
        cout << a.x << endl;  
    }  
    else  
    {  
        cout << "no" << endl;  
    }  
  
  	A temp = a.get();
    if(&a == &temp)  
    {  
        cout << "yes" << endl;  
    }  
    else  
    {  
        cout << "no" << endl;  
    }


    if(&a == &a.get2())  
    {  
        cout << "yes" << endl;  
    }  
    else  
    {  
        cout << "no" << endl;  
    }    
    return 0;  
}   

输出如下:

4
no
yes

return *this时,若返回类型是A,则返回的是对象拷贝,若返回类型是A&,则返回的是对象本身(也就是引用);

参考资料:
http://www.runoob.com/cplusplus/cpp-this-pointer.html
https://blog.csdn.net/daimous/article/details/78618432
https://www.cnblogs.com/liushui-sky/p/5802981.html
https://www.cnblogs.com/zhangruilin/p/5769843.html

猜你喜欢

转载自blog.csdn.net/mayue_web/article/details/88598575
C++