gpt4 book ai didi

c++ - C++ 中 `virtual` 关键字对对象而不是指针的行为

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

我试图理解虚函数。

考虑以下代码,

#include <iostream>
#include <memory>
#include <vector>

class Animal
{
public:
virtual void eat()
{
std::cout << "I eat like a generic animal.\n";
}

};

class Wolf : public Animal
{
public:
void eat()
{
std::cout << "I eat like a wolf!\n";
}
};


int main()
{

Animal a;
Wolf w;

a.eat();
w.eat();

使用 virtual 关键字我得到了输出

I eat like a generic animal.
I eat like a wolf!

这是应该的。

但是如果我删除 virtual 关键字,我仍然会得到相同的输出!从我的对虚函数的基本理解,没有 virtual 我应该得到输出

I eat like a generic animal.
I eat like a generic animal.

这里有什么我遗漏的基本知识吗?

我在 Linux 上使用 g++ 编译器

最佳答案

不,这是正确的行为。需要虚函数来引入多态性。要启用多态行为,您需要使用如下指针:

 Animal * a = new Animal();
Animal * w = new Wolf();

a->eat();
w->eat();

<...>

delete a;
delete w;

按照您现在的方式,行为是正确的,因为两个变量显然具有不同的类型。

关于c++ - C++ 中 `virtual` 关键字对对象而不是指针的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11509748/

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