Если бы у вас было:
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")