在Java中,您可以簡單地使用return this
來獲取當前對象。你如何在C++中做到這一點?在C++中返回「this」?
的Java:
class MyClass {
MyClass example() {
return this;
}
}
在Java中,您可以簡單地使用return this
來獲取當前對象。你如何在C++中做到這一點?在C++中返回「this」?
的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; }
};
如上所述,三種方式中的每一種都以稍微不同的形式返回當前對象。你使用哪一種取決於你需要哪種形式。
不要忘記const版本。 –
嗨,我在哪裏可以閱讀'需要const而不是const版本'。我無法理解這一點。如果方法改變不是類成員,我編寫const版本,否則 - 寫入不是const。爲什麼需要我兩個? –
,因爲返回類型爲void
,即:你宣佈,你不返回任何東西。將其更改爲myclass*
以返回this
更改爲myclass &
以通過*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;
}
如果初始化使用上面的默認構造函數稱爲 類的對象,設置member1_等於1: 然後在你的主要功能,你可以做連鎖店,如:
myclass class;
class.MULT(2).MULT(4);
然後member1_現在是8.當然,這個想法可能是鏈接不同的功能, 和改變不同的成員。
在您使用的是由指針返回的情況下,第一次調用使用對象, 任何後續調用將把先前的結果爲指針,從而
class.MULTP(2.0)->MULTP(3.0);
也許你應該使用測試(幾乎)相同的代碼,看看結果如何?而且,你的方法在上面的代碼中是一個無效方法,所以你可能不想返回任何東西。 –