在C++返回"this"?

return "this" in C++?

本文关键字:this 返回 C++      更新时间:2023-10-16

在Java中,您可以简单地return this来获取当前对象。在c++中如何做到这一点呢?

Java:

class MyClass {
    MyClass example() {
        return this;
    }
}

首先,您不能从void返回函数返回任何内容。

有三种方法返回提供访问当前对象的内容:通过指针、通过引用和通过值。

class myclass {
public:
   // Return by pointer needs const and non-const versions
         myclass* ReturnPointerToCurrentObject()       { return this; }
   const myclass* ReturnPointerToCurrentObject() const { return this; }
   // Return by reference needs const and non-const versions
         myclass& ReturnReferenceToCurrentObject()       { return *this; }
   const myclass& ReturnReferenceToCurrentObject() const { return *this; }
   // Return by value only needs one version.
   myclass ReturnCopyOfCurrentObject() const { return *this; }
};

如上所述,这三种方法中的每一种都以略微不同的形式返回当前对象。

在类中通过引用返回的主要优点之一是能够容易链接函数

假设您的成员函数要乘以类的特定成员。如果在头文件和源文件中分别保存类的信息和成员函数的定义,那么,头文件myclass.h将是:

#ifndef myclass_h
#define myclass_h
class myclass{
  public:
    int member1_;
    double member2_;
    myclass (){
       member1_ = 1;
       member2_ = 2.0;
    }     
    myclass& MULT(int scalar);
    myclass* MULTP(double scalar);
};
#endif 

和源文件:myclass.cpp将是:

myclass& myclass::MULT(int scalar){
      member1_ *= scalar;
      return *this; 
}
myclass* myclass::MULTP(double scalar){
      member2_ *= scalar;
      return this; 
}

如果初始化对象obj,上面的默认构造函数将member1_设置为1:然后在主函数中,可以执行如下链:

myclass obj;
obj.MULT(2).MULT(4);

那么member1_现在将是8。当然,这个想法可能是连接不同的功能,并修改不同的成员

在你使用返回指针的情况下,第一次调用使用对象,并且任何后续调用都将把前面的结果视为指针,因此

obj.MULTP(2.0)->MULTP(3.0);

因为返回类型是void,也就是说:你声明不返回任何东西。修改为myclass*返回this,修改为myclass &通过*this返回对类的引用