我有以下代碼:用C++返回當前對象(* this)?
代碼1
class Student {
int no;
char grade[M+1];
public:
Student() {
no = 0;
grade[0] = '\0';
}
void set(int n, const char* g) {
no = n;
strcpy(grade, g);
}
const Student getObject() {
return *this;
}
void display() const {
cout << no << ", " << grade << endl;
}
};
代碼2:
// no change from code 1
const Student& getObject() {
return *this;
}
// no change from code 1
正如本書我讀解釋裏getObject()代碼的區別1 2是代碼2的getObject()返回對當前對象的引用,而不是副本(出於效率的原因)。
測試代碼:
Student harry, harry1;
harry.set(123, "ABCD");
harry1 = harry.getObject();
harry1.set(1111,"MMMMMM");
harry.display(); // Line 1 => displayed: 123, ABCD
harry1.display();/Line 2 => displayed: 1111, MMMMMM
我不明白
然而,如下我已經測試(代碼2)。如果getObject()返回一個引用,那麼測試代碼中的第1行也應該顯示111,MMMMMM?因爲我認爲harry應該包含harry對象的地址? 還是我誤解了一些東西?
這不僅僅是爲了提高效率。有時副本可能不可能。 – 2011-05-11 12:03:33
將所有建議修改'harry1'爲'Student&' - 這不會作爲getObj()向Student返回一個** const ** ref,所以這不會被編譯。 – davka 2011-05-11 12:07:03
閱讀有關賦值運算符。你正在像這樣使用'harry1 = harry.getObject();'。它將一個對象的值複製到另一個對象。 – 2011-05-11 13:30:23