The glib answer as that they play the same role here as they play anywhere else.
In line 1, the '&' symbols denote that the arguments are being passed in as references, and the result is being returned as a reference.
In line 2, the * is de-referencing the pointer that points to the object dynamically allocated by new.
So, in your first example, the arguments to the operator are passed by reference. The result is dynamically allocated, and a reference to the dynamically allocated result is returned. This, incidentally, is not a good way to do it, as it leaves the calling code responsible for freeing up the memory. There's potential for a memory leak here.
In the second exampke, the arguments are passed by value, and the result is returned by value.