Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Merovingian
54 / 54 / 5
Регистрация: 24.09.2011
Сообщений: 149
#1

Почему перегруженный оператор = должен возвращать ссылку на объект - C++

28.03.2012, 01:30. Просмотров 882. Ответов 9
Метки нет (Все метки)

Объясните доступно пожалуйста.

Почему перегруженный оператор= должен возвращать ссылку на объект? А оператор+ может возвращать как ссылку на объект, так и сам объект?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.03.2012, 01:30     Почему перегруженный оператор = должен возвращать ссылку на объект
Посмотрите здесь:

А можно в функцию, или перегруженный оператор передать ссылку на копию? - C++
И какой надо написать прототип?

Почему не работает перегруженный оператор? - C++
вот проект в котором реализуется простенький класс матрицы. посмотрите в чем проблема с перегруженными операторами...

Уточняющий вопрос: почему при перегрузке оператора [] необходимо возвращать ссылку? - C++
Сабж. Ну, то есть есть класс, что-то такое: #include <iostream> using namespace std; class arr { public: explicit...

Почему оператор сложения двух временных объектов возвращает lvalue ссылку? - C++
Допустим есть класс: class A { public: A() {} A(const A&) { cout << "A(const A&)\n"; } A(A&&) { cout <<...

перегруженный оператор << - C++
подскажите как перегрузить оператор &lt;&lt; для класса как описать само перегружение friend ostream&amp; operator &lt;&lt; (ostream &amp;c, const...

Перегруженный оператор - C++
MathClass = Harry; Раньше я думал, что перегрузка - это предоставление оператору функций, которых, он изначально не имел. Что...

Глобальный перегруженный оператор - C++
Как организовать работу глобального перегруженного оператора &quot;-&quot;, который должен сравнивать 5 массивов(экземпляры класса). Помогите,...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
28.03.2012, 02:56     Почему перегруженный оператор = должен возвращать ссылку на объект #2
Цитата Сообщение от Merovingian Посмотреть сообщение
Почему перегруженный оператор= должен возвращать ссылку на объект?
перегруженный оператор= ничего никому не должен, принято возвращать ссылку чтобы операция присваивания объектов пользовательского типа, имела такую же семантику как и у стандартных типов
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
28.03.2012, 09:04     Почему перегруженный оператор = должен возвращать ссылку на объект #3
Цитата Сообщение от Merovingian Посмотреть сообщение
оператор+ может возвращать как ссылку на объект
Не может.
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
28.03.2012, 10:01     Почему перегруженный оператор = должен возвращать ссылку на объект #4
Deviaphan, ну почему же, могут быть очень экзотические случаи. Скажем, он возвращает ссылку на некоторый статический объект-член класса. Но это действительно экзотика, и ни о каком сохранении семантики речи уже не идёт
gore-lykovoe
32 / 32 / 1
Регистрация: 04.04.2010
Сообщений: 414
28.03.2012, 10:11     Почему перегруженный оператор = должен возвращать ссылку на объект #5
Цитата Сообщение от Merovingian Посмотреть сообщение
Почему перегруженный оператор= должен возвращать ссылку на объект?
потому что, если он не будет возвращать ссылку на объект, то компилятор будет запускать копиконструктор, и твоя операция будет называться не присваиванием, а инициализацией. А вот когда мы возвращаем ссылку на объект, тогда копиконструктор не запускается и получается операция присваивания.
silent_1991
Эксперт С++
4960 / 3036 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
28.03.2012, 10:16     Почему перегруженный оператор = должен возвращать ссылку на объект #6
gore-lykovoe, бред.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
 
class Foo
{
public:
    Foo()
    {
    }
    
    // Оператор присваивания ничего не возвращает
    void operator=(const Foo&)
    {
        std::cout << "Foo::operator=(const Foo&)" << std::endl;
    }
    
private:
    // Конструктор копии скрыт и оставлен без реализации
    Foo(const Foo&);
};
 
int main()
{
    Foo a, b;
    
    a = b; // Вывод "Foo::operator=(const Foo&)"
    
    return 0;
}
gore-lykovoe
32 / 32 / 1
Регистрация: 04.04.2010
Сообщений: 414
28.03.2012, 10:32     Почему перегруженный оператор = должен возвращать ссылку на объект #7
Цитата Сообщение от silent_1991 Посмотреть сообщение
бред.
да, в голове все перемешивается, когда проходишь большие темы за день((
Merovingian
54 / 54 / 5
Регистрация: 24.09.2011
Сообщений: 149
28.03.2012, 14:10  [ТС]     Почему перегруженный оператор = должен возвращать ссылку на объект #8
Цитата Сообщение от Deviaphan Посмотреть сообщение
Не может.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
TString TString::operator+(const TString& s) const
{
    TString temp;
    temp.len = len + s.len;
    temp.str = new char[temp.len + 1];
    strcpy(temp.str, str);
    strcat(temp.str, s.str);
    return temp;
}
...
TString s("12");
TString s1 = s;
s = s+s1; // работает
Это работает,
А когда возвращает ссылку, то
C++
1
s = s+s1; // не работает
Но почему?
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
28.03.2012, 14:16     Почему перегруженный оператор = должен возвращать ссылку на объект #9
Цитата Сообщение от Merovingian Посмотреть сообщение
Но почему?
Во-первых, потому что я уже предупредил, что не может (кроме исключительных случаев, упомянутых silent_1991)
Во-вторых, возвращается ссылка на локальный объект, который к моменту использования оказывается уничтоженным.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.03.2012, 14:21     Почему перегруженный оператор = должен возвращать ссылку на объект
Еще ссылки по теме:

Перегруженный постфиксный оператор ++ - C++
Есть задание: Создать класс &quot;нота&quot;: название, октава, продолжительность звучания. Производные: &quot;звук&quot; (частота) и &quot;изображение&quot;...

Не работает перегруженный оператор - C++
Привет, у меня есть класс такой: class Sterling { private: long pounds = 0; int shillings = 0; int pennys = 0; public:...

Перегруженный оператор присваивания - C++
Добрый вечер! Встретил пример в книге, где есть перегруженный оператор присваивания. В итоге код который написан в книге не запускается. Во...

Функтор и перегруженный оператор - C++
захотел понять многопоточность в новом стадарте с++11 - смотрю http://sergeyteplyakov.blogspot.ru/2012/05/c-11-faq.html#std-threads - вижу...

Перегруженный оператор вывода - C++
Есть базовый класс Точка и его наследник Круг. Как в Круге использовать operator&lt;&lt; для Точки? Надо вывести координаты центра круга ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Merovingian
54 / 54 / 5
Регистрация: 24.09.2011
Сообщений: 149
28.03.2012, 14:21  [ТС]     Почему перегруженный оператор = должен возвращать ссылку на объект #10
Цитата Сообщение от Deviaphan Посмотреть сообщение
Во-вторых, возвращается ссылка на локальный объект, который к моменту использования оказывается уничтоженным.
Вот так очень понятно. Большое спасибо.
Yandex
Объявления
28.03.2012, 14:21     Почему перегруженный оператор = должен возвращать ссылку на объект
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru