c++ - 关键字 "virtual"是否传递给中间基类?

标签 c++ inheritance virtual-functions

如果我像这样从 A 派生 B,从 B 派生 C:

A
|
B
|
C

我很可能在 A 中有一个或多个虚函数。现在,我不小心忘记在 B 的函数声明中放置关键字 virtual。但令我惊讶的是,它就像在 B 中也设置了 virtual 一样工作。这是代码:

#include <iostream>

using std::cout;
using std::endl;

class A 
{
public:
    virtual void foo(){cout << "A\n";};
};

class B : public A
{
public:
    void foo(){cout << "B\n";} // a "virtual doesn't change the behaviour...
};

class C : public B
{
public:
    void foo(){cout << "C\n";}
};

int main()
{
    C c;
    c.foo();

    A *pa = new C;
    pa->foo();

    B *pb = new C;
    pb->foo();

    return 0;
}

如果你在A中也省略了virtual,输出是

C
A
B

否则就是

C
C
C

即使 B 中没有 virtual!

那么:关键字是否以某种方式继承?还是我理解错了?

最佳答案

如果一个方法在基类中是virtual,那么它在其子类中也是virtual,而无需这样声明它。

关于c++ - 关键字 "virtual"是否传递给中间基类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19090502/

相关文章:

c++ - 什么是对象切片?

链接时未定义 C++ 虚函数 - 为什么?

c++ - 重载虚函数集的部分继承

c++ - 为什么我更喜欢使用成员初始化列表?

c# - 在 C# 中读写 C++ 动态数组 (InteropServices)

javascript - 如何使用 Prototype 库模拟 JavaScript 中的访问修饰符?

python - 为什么python中的继承要求父类显式继承对象?

c++ - 牡丹PK_Signer

c++ - 二维数组的行为

c++ - 初始化派生类虚函数返回的内联静态变量的最佳方法