c++ - 当使用 'virtual' 或 'override' 说明符时, 'final' 关键字不是多余的吗?

标签 c++ overriding virtual final

假设我有以下基类:

class Base {
    public:
        virtual void f() {};
};

如果我想编写一个将覆盖 f() 并且不允许将其覆盖到它的派生类的类,可以使用以下方法编写它:

方法一:

class Derived : public Base {
    public:
        virtual void f() override final {};
};

方法 2:

class Derived : public Base {
    public:
        void f() final {};
};

方法 1 是一个非常详细的方法,而 方法 2 更紧凑并且 final 仍然说 f()实际上是虚拟的并覆盖了基类方法。

哪种方法更合适?

最佳答案

在“方法一”中,虚拟确实是多余的。 “override”是一个特殊的标识符,它向代码的读者表明一个虚函数正在被覆盖,同时也是一个提示,让编译器验证它实际上是。基类已经声明了函数是虚函数,就不用再声明了。

当不使用“final”关键字时,最好使用“virtual”关键字,以保持可读性。方法 2 是这种情况下的最佳实践表示法。

这归结为您的环境中使用的样式,但 final 绝对不意味着覆盖 final。

关于c++ - 当使用 'virtual' 或 'override' 说明符时, 'final' 关键字不是多余的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43466863/

相关文章:

java - 用子类对象的父类(super class)引用覆盖

css - 如何覆盖媒体查询中的所有类?

html - 如何在同一行显示两个图像(CSS)

c++ - VC++正则表达式匹配长字符串

c++ - 我应该传递什么来抛出?

java - OOP 中的覆盖、重载和隐藏

c++ - 未使用的私有(private)虚拟方法是否允许在不破坏 ABI 兼容性的情况下进行 future 扩展?

azure | Ubuntu 机器与 Windows10 机器成本计算

c++ - 调用cout时,如何在struct中输出常量文本?

c++ - 在与父类具有相同类型的类中声明模板类