在 C++ 中,final
是一个用于限制类或虚函数进一步派生或重写的关键字。它的主要作用是增强代码的安全性和可维护性。
1. 用于类
当 final
用于类时,表示该类不能被继承。
语法:
class Base final {// 类定义};class Base final { // 类定义 };class Base final { // 类定义 };
示例:
class Base final {public:void show() {std::cout << "Base class" << std::endl;}};// 错误:Base 是 final 类,不能被继承class Derived : public Base {public:void show() {std::cout << "Derived class" << std::endl;}};class Base final { public: void show() { std::cout << "Base class" << std::endl; } }; // 错误:Base 是 final 类,不能被继承 class Derived : public Base { public: void show() { std::cout << "Derived class" << std::endl; } };class Base final { public: void show() { std::cout << "Base class" << std::endl; } }; // 错误:Base 是 final 类,不能被继承 class Derived : public Base { public: void show() { std::cout << "Derived class" << std::endl; } };
作用:
- 防止其他类继承该类,确保类的行为不会被修改。
- 适用于设计不希望被扩展的类,例如工具类或某些核心类。
2. 用于虚函数
当 final
用于虚函数时,表示该虚函数不能在派生类中被重写。
语法:
class Base {public:virtual void show() final {std::cout << "Base class" << std::endl;}};class Base { public: virtual void show() final { std::cout << "Base class" << std::endl; } };class Base { public: virtual void show() final { std::cout << "Base class" << std::endl; } };
示例:
class Base {public:virtual void show() final {std::cout << "Base class" << std::endl;}};class Derived : public Base {public:// 错误:show 是 final 函数,不能被重写void show() override {std::cout << "Derived class" << std::endl;}};class Base { public: virtual void show() final { std::cout << "Base class" << std::endl; } }; class Derived : public Base { public: // 错误:show 是 final 函数,不能被重写 void show() override { std::cout << "Derived class" << std::endl; } };class Base { public: virtual void show() final { std::cout << "Base class" << std::endl; } }; class Derived : public Base { public: // 错误:show 是 final 函数,不能被重写 void show() override { std::cout << "Derived class" << std::endl; } };
作用:
- 防止派生类修改基类的特定行为,确保某些关键逻辑的一致性。
- 适用于设计不希望被修改的虚函数,例如某些核心算法或接口。
3. 使用场景
- 禁止继承:当设计一个类时,如果不希望其他类继承它,可以使用
final
。 - 禁止重写:当设计一个虚函数时,如果不希望派生类重写它,可以使用
final
。 - 优化性能:编译器可以对
final
类或函数进行优化,因为它们的继承关系或行为是确定的。
4. 总结
用途 | 作用 |
---|---|
类 | 禁止该类被继承,确保类的行为不会被修改。 |
虚函数 | 禁止派生类重写该虚函数,确保函数的行为不会被修改。 |
设计意图 | 增强代码的安全性和可维护性,防止意外的继承或重写。 |
final
是 C++11 引入的关键字,合理使用它可以提高代码的健壮性和可读性。
THE END
暂无评论内容