与Java多态相比,C ++多态如何工作?

时间:2019-06-13 18:22:21

标签: java c++

今年的考试中,我对Java上下文中的多态性也提出了类似的问题。 Java的想法是,在编译时,类A中的函数将被认为是合适的(考虑到编译时变量的类型),并且在运行时JVM将根据以下内容搜索覆盖的版本(在运行时类型为a的情况下,它将从B中找到版本(因为C的版本实际上并未被覆盖。

我的问题是,由于C ++中没有JVM,如何根据变量的运行时类型确定函数的正确版本?我有一个模糊的想法,认为它与vtable有关(的确如此),但我不知道它是如何工作的。

#include <iostream>

struct A
{
    virtual int f(A*) { return 255; }
};

struct B : public A
{
    virtual int f(A*) { return 170; }
};

struct C : public B
{
    virtual int f(C*) { return 204; }
};

int main()
{
    A* a = new C;
    B* b = new C;
    C* c = new C;

    std::cout << a->f(c);

    return 0;
}

输出为170。

0 个答案:

没有答案