Как работает возврат объекта по ссылке - PullRequest
1 голос
/ 18 февраля 2020

Как я понимаю, это моя ссылка SomeClass & ref = b; После этого b = ref; Тогда c = b; SomeClass & ref2 = c; тогда с = ref2. Но я звоню оператору = ведьма, которую я перезагрузил, когда b = ref или c = ref2? Что-то в этом роде a.operator = (ref)?

class SomeClass
{
public:
    SomeClass()
    {
        a = 5;
    }
    SomeClass(int l_a)
    {
        a = l_a;
    }

    SomeClass& operator=(const SomeClass& l_copy)
    {
        this->a = l_copy.a;
        return *this;
    }

    int a;
};

int main()
{
    SomeClass a;
    SomeClass b(1);
    SomeClass с(6);
    с = b = a;

}

Ответы [ 2 ]

1 голос
/ 18 февраля 2020

Перегрузив оператор = в SomeClass, вы выполняете назначение копирования lhs = rhs (Например: c = b, c равно lhs, а b равно rhs). Поскольку он возвращает ссылку, соответствующую SomeClass& operator= ожидаемому типу параметра, вы можете связать несколько назначений копирования, таких как c = b = a.

1 голос
/ 18 февраля 2020

Если бы у вас было:

void operator=(const SomeClass& l_copy)
    {
        this->a = l_copy.a;
    }

Тогда ваши операции по назначениям будут ограничены:

b = a;
c = b;

Возвращая ссылку, вы можете связывать назначения, как в:

c = b = a;
// c.operator = (b.operator = (a));

//1: b.operator= ("ref a")
//2: c.operator= ("ref b")
...