在C++返回"this"?
return "this" in C++?
在Java中,您可以简单地return this
来获取当前对象。在c++中如何做到这一点呢?
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
返回对类的引用
相关文章:
- 在 C++ 中返回新的构造函数(*this)工厂
- 为什么在通过引用返回运算符分配时取消引用'this'指针?
- 是否是从等待返回到悬而未决的"this"实例的未定义行为?
- 返回 *this 和 this - c++ 之间的区别
- 返回C++"This"对象的函数
- 返回带或不带 *this 的变量的确切方式不同 |这不是关于*此指针|正确性
- ob->我应该返回 ob "this" 的地址,但它返回 i ,任何解释?
- 为什么我的重载运算符+在向自身添加变量时会在返回时使"this"未初始化?
- 这个函数指针的尾部返回类型为"this"合法吗
- 返回 *this,尝试级联,并且不返回引用
- 从 const 成员函数返回 'this' 作为非常量
- 如何自动更新重写方法的 *this 返回类型
- 如何从"this"对象本身内部将shared_ptr返回到当前对象
- 为什么有些类方法返回"*this"(self的对象引用)?
- C++对返回*this的成员函数的重复调用顺序
- 是否可以将动态强制转换"this"作为返回值?
- 使用 *this 作为返回值
- 返回对"this"的取消引用的重写方法
- C++,pthread和静态回调。 "this" 返回一个指针,指向派生的基类(第 2 部分)
- 为什么"return *this"返回引用?