C++中final的用法

653 阅读1分钟

在 C++ 中,final 关键字有两个主要用途:一是防止类的进一步派生(即不能有子类),二是防止虚函数在派生类中被重写。下面是 final 的主要用法及相应的示例代码。

1. 防止类的进一步派生

在 C++11 及以后的版本中,final 可以用于类声明,以防止该类被继承。

class Base final {
    // 类定义
};

class Derived : public Base { // 错误:Base 是 final,不能被继承
    // 类定义
};

2. 防止虚函数被重写

final 也可以用于虚函数声明,以防止该函数在派生类中被重写。

class Base {
public:
    virtual void show() final {
        // 函数实现
    }
};

class Derived : public Base {
public:
    void show() override { // 错误:show() 是 final,不能被重写
        // 函数实现
    }
};

3. 结合 overridefinal

在实际编程中,final 常常与 override 一起使用,这样可以更清楚地表达函数重写的意图,并防止进一步重写。

class Base {
public:
    virtual void show() {
        // 函数实现
    }
};

class Derived : public Base {
public:
    void show() override final { // 重写并标记为 final
        // 函数实现
    }
};

class AnotherDerived : public Derived {
public:
    void show() override { // 错误:Derived 中的 show() 已标记为 final
        // 函数实现
    }
};

总结

final 关键字是 C++11 引入的一部分,旨在提供更多的控制权,以避免类的不必要或意外的继承,以及防止虚函数的进一步重写。这些特性对于保持代码的清晰性和维护性非常有帮助,尤其是在大型和复杂的面向对象系统中。