在继承层次结构中将方法定义为虚拟方法一次,以使多态性发挥作用

Define the method once to be virtual in the inheritance hierarchy to make polymorphism to work

本文关键字:方法 一次 多态性 作用 层次结构 继承 定义 虚拟      更新时间:2023-10-16

在继承层次结构中将方法定义为virtual是否足以使多态性发挥作用。在以下示例中,Der::f未定义为virtual,但d2->f();打印der2我正在使用VS IDE(可能只是在那里…)

class Base
{
public:
    virtual void f() { std::cout << "base"; }
};
class Der : public Base
{
public:
    void f() { std::cout << "der"; } //should be virtual?
};
class Der2 : public Der
{
public:
    void f() { std::cout << "der2"; }
};
int main()
{
    Der* d2 = new Der2();
    d2->f();
}

是的,如果只在基类中将方法定义为虚拟方法,多态性就会起作用。然而,我在处理一些大型项目时遇到的惯例是,在派生类的方法声明中总是重复虚拟关键字。当您处理许多具有复杂类层次结构(许多继承级别)的文件时,它可能很有用,其中类在单独的文件中声明。这样,您就不必在添加另一个派生类时通过查找基类声明来检查哪个方法是虚拟的。

直接或通过多个层从Base继承的所有东西都将具有虚拟的f(),就好像在声明f()时类declarion已明确放置了virtual一样。