Страницы

Поиск по вопросам

понедельник, 12 ноября 2018 г.

Почему оператор= возвращает объект того же экземпляра класса, для которого он вызывается?

Предположим есть некий класс который управляет неким ресурсом и у нас есть следующий код для оператора присваивания. Resource& Resource::operator=(const Resource& rhs) { this->someProperty = rhs.someProperty; return *this; } Вопрос, зачем нужно возвращать *this? Ну присвоили мы, и все хорошо: Resource resource1; Resource resource2; resource1 = resource2; Зачем самого себя еще возвращать?


Ответ

Это нужно для того чтобы была возможность писать так: first = second = third Если вы объявите в качестве типа возвращаемого значения void, то не сможете полученному результату какое-либо значение/ Маленький пример: class Int { public : int Variable;
void operator= (const int& rhs); };
void Int::operator= (const int& rhs) { this->Variable = rhs; }
Int i, g; i.Variable = 10; g.Variable = 10;
i = 30; // так можно i = g = 30; // а так нельзя

Комментариев нет:

Отправить комментарий