Страницы

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

суббота, 21 декабря 2019 г.

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

#cpp


Предположим есть некий класс который управляет неким ресурсом и у нас есть следующий
код для оператора присваивания.
Resource& Resource::operator=(const Resource& rhs)
{
    this->someProperty = rhs.someProperty;
    return *this;
}

Вопрос, зачем нужно возвращать *this?
Ну присвоили мы, и все хорошо:
Resource resource1;
Resource resource2;
resource1 = resource2;

Зачем самого себя еще возвращать?    


Ответы

Ответ 1



Это нужно для того чтобы была возможность писать так: 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; // а так нельзя

Ответ 2



Ответ уже есть на SOV Как и сказал @DreamChild без возврата ссылки на объект вы не сможете сделать следующее: Resource resource1; Resource resource2; Resource resource3; resource1 = resource2 = resource3;

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

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