Что означает & после возвращаемого типа в C ++ OOP - PullRequest
0 голосов
/ 29 мая 2020

поэтому у меня есть метод класса, приведенного ниже, который умножает два комплексных числа с использованием перегрузки оператора:

Complex operator*(Complex &c2) {
    Complex temp;

    temp.realPart = realPart * c2.realPart - (imaginaryPart * c2.imaginaryPart);
    temp.imaginaryPart = (realPart * c2.imaginaryPart) + (imaginaryPart * c2.realPart);

    return temp;
}

Кажется, это работает нормально. Однако моя программа не запускается, когда я изменяю заголовок функции-члена на:

Complex& operator * (Complex &c2) {  // Adding & after the class name.

Программа не работает sh, но не может вычислить ответ / завершается после того, как курсор в программе мигает какое-то время. Что означает & после имени класса? И я видел, как он использовался при возврате указателя this.

Ответы [ 2 ]

3 голосов
/ 29 мая 2020

Что означает & после возвращаемого типа в C ++

Это означает то же самое, что и & после любого типа. Это означает, что тип является ссылкой. Итак, если он находится после типа возврата, это означает, что функция возвращает ссылку.

Ваша функция возвращает автоматическую c переменную. Возвращать ссылку на автоматическую c переменную бесполезно, потому что объект automati c уничтожается при возврате, поэтому ссылка сразу становится недействительной.

Если вы попытаетесь получить доступ к несуществующему объекту через вернул недопустимую ссылку, тогда поведение программы будет неопределенным.

0 голосов
/ 29 мая 2020

Вы возвращаете ссылку на объект так же, как и рядом с любой переменной. В некоторых случаях это хорошо, но в других случаях вы можете возвращать ссылку на временные переменные, а затем при любом изменении эти временные объекты освобождаются из памяти. то вы ссылаетесь на освобожденный блок памяти. Черно очень хорошо объясняет это в своем видео о rvalue и lvalues, вы можете go и увидеть его здесь: https://www.youtube.com/watch?v=fbYknr-HPYE

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...