title: What is the operator= returning?
body: <p>Came across a code. I am posting the snippet.</p>
  
  <pre><code>Animal &amp; Animal::operator=(const Animal &amp; o) {
      cout &lt;&lt; "assignment operator" &lt;&lt; endl;
      if(this != &amp;o) {
          _type = o._type;
          _name = clone_prefix + o._name;
          _sound = o._sound;
      }
      return *this;
  }
  
  int main( int argc, char ** argv ) {
      Animal a;
      a.print();
  
      const Animal b("goat", "bob", "baah");
      b.print();
  
      const Animal c = b;
      c.print();
  
      a = c;
      a.print();
  
      return 0;
  </code></pre>
  
  <hr>
  
  <p>My question: This is he pointer to the current object right? The assignment operator returns the object of Animal type right? since it is returning *this?  But isn't it supposed to return address of object since its return type is Animal &amp; ?
  I am not understanding this.</p>