维基百科关于虚拟函数的文章指出了以下内容:
虚拟函数允许程序调用在编译代码时不一定存在的方法。
它给出了 C++ 和 C 的通用代码,但它们没有解释编译后如何生成函数调用。有人可以提供一个例子吗,最好是 C++ 的,如果不行的话,Java 吗?
如有任何建议,我们将不胜感激,谢谢。
虚函数最典型的用途是编写接口时,基本上你在某个头文件中有一个接口
// some_header.h
class ICar
{
public:
virtual void Drive() = 0;
~IWidget() {}
};
使用一个函数编译库,该函数可以使用实现此接口的类的实例。
// library1
void DriveCar(ICar& car)
{
car.Drive();
}
然后你的主程序将创建一个实现这些功能的具体汽车。
#include <iostream>
void DriveCar(ICar& car);
class MiniVan: public ICar
{
public:
void Drive() override { std::cout << "vrooom!\n";}
};
int main()
{
MiniVan van;
DriveCar(van);
}
当
library1
被编译时,它不知道MiniVan
存在,但它可以调用从ICar
继承的虚拟方法。