在Java中,您只需return this获取当前对象即可.你是如何用C++做到的?
Java的:
class MyClass {
MyClass example() {
return this;
}
}
Run Code Online (Sandbox Code Playgroud)
Rob*_*obᵩ 35
好吧,首先,你不能从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; }
};
Run Code Online (Sandbox Code Playgroud)
如上所述,三种方式中的每一种都以略微不同的形式返回当前对象.您使用哪一个取决于您需要哪种形式.
小智 8
在类中通过引用返回的主要优点之一是能够轻松链接函数.
假设您的成员函数是乘以您班级的特定成员.如果你使头文件和源文件分别保存类的信息和成员函数的定义,那么头文件 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
Run Code Online (Sandbox Code Playgroud)
和源文件:myclass.cpp将是:
myclass& myclass::MULT(int scalar){
member1_ *= scalar;
return *this;
}
myclass* myclass::MULTP(double scalar){
member2_ *= scalar;
return this;
}
Run Code Online (Sandbox Code Playgroud)
如果初始化一个被调用的对象obj,则上面的默认构造函数设置member1_为1:然后在main函数中,您可以执行以下链:
myclass obj;
obj.MULT(2).MULT(4);
Run Code Online (Sandbox Code Playgroud)
那么member1_现在将是8.当然,这个想法可能是连接不同的功能,并改变不同的成员.
在使用return by pointer的情况下,第一个调用使用该对象,任何后续调用都会将前一个结果视为指针,因此
obj.MULTP(2.0)->MULTP(3.0);
Run Code Online (Sandbox Code Playgroud)