我试图了解虚函数.
考虑以下代码,
#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 ++编译器
不,这是一种正确的行为.引入多态性需要虚函数.要启用多态性行为,您需要使用如下指针:
Animal * a = new Animal();
Animal * w = new Wolf();
a->eat();
w->eat();
<...>
delete a;
delete w;
Run Code Online (Sandbox Code Playgroud)
按照现在的方式,行为是正确的,因为两个变量显然都有不同的类型.