Code:
your_String = "static string literal";
Is the same as
Code:
your_String.operator=("static string literal");
Now, if you have
Code:
my_String = your_String = "static string literal";
Then you really have
Code:
my_String.copy_constructor(your_String.operator=("static string literal"));
The only argument the default copy constructor takes is a reference to an object of the class's type (String). So, have your operator=() function return a reference to a String. Which String? Well, which object does it make sense to return? this object. So, we return *this (the actual object calling the operator), for which a reference to is returned by the function.