编译时不存在的虚函数方法调用示例?

问题描述 投票:0回答:1

维基百科关于虚拟函数的文章指出了以下内容:

虚拟函数允许程序调用在编译代码时不一定存在的方法。

不幸的是它没有给出示例,并指出“需要引用。”

它给出了 C++ 和 C 的通用代码,但它们没有解释编译后如何生成函数调用。有人可以提供一个例子吗,最好是 C++ 的,如果不行的话,Java 吗?

如有任何建议,我们将不胜感激,谢谢。

c++ oop virtual dispatch
1个回答
0
投票

虚函数最典型的用途是编写接口时,基本上你在某个头文件中有一个接口

// 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
继承的虚拟方法。

© www.soinside.com 2019 - 2024. All rights reserved.