次のコードで、参照cに対するeat()の最後の呼び出しが「動物 b が食べています。 」を返すのはなぜですか? 私の理解では、cは派生クラスDogのインスタンスbへの参照であり、eat()は仮想関数です。ですから、 「犬 b が食べています」と返されたはずです。
#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;
}
これは出力です:
An animal A is eating.
A dog b is eating.
An animal A is eating.
An animal b is eating.