title: What is being declared in Dog copy constructor [:Mammal(rhs)]?
body: <p>While reading "Sams teach yourself c++ in 21 days" I cannot understand how does virtual copy constructor work. 
  Full code from book is here:
  [http://cboard.cprogramming.com/cplusplus-programming/9392-virtual-copy-constructor-help.html][1]</p>
  
  <p>Especially virtual method  Clone() calls Mammal copy constructor and Dog copy constructor
  because it returns "Mammal*" and  returns "new dog (*this)" </p>
  
  <pre><code>  Mammal::Mammal(const Mammal &amp;rhs):itsAge(rhs.GetAge())
      {
      cout &lt;&lt;  "Mammal copy constructor\n";
      };
  
  Dog::Dog (const Dog &amp;rhs):Mammal(rhs) //what is ":Mammal(rhs)" here -     
                                        // call of Mammal copy constructor?  
                                        //if not why is it required?
                                        //or what is it here?
  {
      cout &lt;&lt; "Dog copy constructor\n";
  }; 
  </code></pre>
  
  <p>And what does return "return new Dog(*this)"?
  new object or pointer at new object?</p>
  
  <p>Thank you for your answers.
  P.S.
  Sorry for my previous answer with wrong tags.
  It is my first experience of using 'stackoverflow"</p>