In the following code, why does the last call of eat() on the reference c return "An animal b is eating." ? From my understanding, c is a reference to instance b of the derived class Dog and eat() is a virtual function. So it should have returned "A dog b is eating."
#include <string>
#include <iostream>
using namespace std;
class Animal
{
protected:
    string name;
public:
    Animal( string _name ):
    name(_name)
    {
    }
    virtual void eat()
    { 
        cout << "An animal " << name << " is eating." << endl;
    }
};
class Dog : public Animal
{
public:
    Dog( string _name ):
    Animal(_name)
    {
    }
    void eat()
    {
        cout << "A dog " << name << " is eating." << endl;
    }
};
int main( int argc , char ** argv )
{
    Animal a("A");
    a.eat();
    Dog b("b");
    b.eat();
    Animal & c = a;
    c.eat();
    c = b;
    c.eat();
    return 0;
}
This is the output:
An animal A is eating.
A dog b is eating. 
An animal A is eating. 
An animal b is eating.
 
     
     
     
     
     
    