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

smi*_*dha 4 c++ virtual

我试图了解虚函数.

考虑以下代码,

#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();
Run Code Online (Sandbox Code Playgroud)

}

使用virtual关键字我得到输出

I eat like a generic animal.
I eat like a wolf!
Run Code Online (Sandbox Code Playgroud)

正如它应该.

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

I eat like a generic animal.
I eat like a generic animal.
Run Code Online (Sandbox Code Playgroud)

我在这里有什么基本的东西吗?

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

Sin*_*all 5

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

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

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

 <...>

 delete a;
 delete w;
Run Code Online (Sandbox Code Playgroud)

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