【发布时间】:2026-01-12 08:25:02
【问题描述】:
在下面的代码中,为什么最后一次调用 c 上的 eat() 会返回“动物 b 正在吃东西。" ?据我了解,c 是对派生类 Dog 的实例 b 的引用,而 eat() 是虚函数。所以它应该返回“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;
}
这是输出:
An animal A is eating.
A dog b is eating.
An animal A is eating.
An animal b is eating.
【问题讨论】:
-
我在您的代码中没有看到引用
d。 -
@taocp,抱歉是 c,不是 d。我已经修好了。
-
12 秒内 3 个答案.... :)
标签: c++ inheritance virtual