gpt4 book ai didi

c++ - 在引用上调用虚函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:22:32 25 4
gpt4 key购买 nike

在下面的代码中,为什么对引用 c 的最后一次调用 eat() 返回“An animal b is eating.”?根据我的理解,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.

最佳答案

Animal & c = a;
c.eat();

c = b; ///^^^
c.eat();

在 C++ 中,引用一旦被初始化就不能重新绑定(bind)到其他对象。 c 仍然是对象 a 的别名,它是一个 Animal,因此,您看到了预期的输出。

关于c++ - 在引用上调用虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16635478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com