Я знаю, как писать код, но не могу объяснить смысл кода здесь:
ArrayList& ArrayList::operator =(const ArrayList& other) {
delete[] m_elements;
copy(other);
return *this;
}
1-й вопрос
Я знаю, что ArrayList&
означает "передать его по ссылке". Но это первый раз, когда я вижу ArrayList&
как возвращаемый тип метода. В чем разница между:
ArrayList ArrayList :: operator() {}
а также
ArrayList& ArrayList :: operator(){}
Второй вопрос
Что return *this
означает? Зачем возвращать указатель? Разве это не должно быть return this;
?
** EDITED
Третий вопрос
Указывает ли этот код ниже: "Этот метод Возвращает некоторый странный адрес памяти (что-то вроде 0x90183930)" по ссылке "?
ArrayList*& ArrayList ::operator(){}
Семантика стандартного присваивания возвращает назначенное значение в результате присвоения.
Поэтому он должен возвращать либо ArrayList, либо const ArrayList &. Более поздняя версия предпочтительна для больших объектов, поскольку она проходит только по адресу, а не по полной копии рассматриваемого значения.
btw, его возвращение * это, так как после завершения задания * это значение, которое было назначено.
const
? Почему бы не разрешить что-то вроде (array1 = array2) += array3
? Если вы возвращаете себя в целях создания цепочки, вполне можете позволить это хорошо.
Тип данных, за которым следует амперсанд в C++, является просто ссылкой на объект вместо объекта в целом (который будет копией). Следовательно, ArrayList&
является ссылкой на объект типа ArrayList
.
Из этого следует второй вопрос. В контексте класса ArrayList
this
указатель на текущий экземпляр, таким образом, тип ArrayList*
. *
Перед this
разыгрывает этот указатель, в результате чего объект указывает, который действителен для передачи по ссылке, и как таковой соответствует указанному типу возврата ArrayList&
.
Если бы он вернул this
вместо *this
возвращаемый тип должен был быть ArrayList*
.
int get1X() { return x; }
иint& get2X() { return x; }
тестирование Во-первых:get1X() = 0
<- ошибка! Второе:get2X() = 0
<-компилируется!