У меня есть следующий код:
Код 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 заключается в том, что getObject () кода 2 возвращает ссылку на текущий объект вместо копии (из соображений эффективности).
Однако я проверял (код 2)следующим образом:
Проверенный код:
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
Я не понимаю.Если getObject () возвращает ссылку, то строка 1 в тестируемом коде также должна отображать 111, ММММММ?Потому что я думал, что harry1 должен содержать адрес объекта Гарри ???Или я что-то неправильно понимаю?