主页 > 开源代码  > 

C++11新特性之final

C++11新特性之final

1.介绍

        final是C++11引入的特性,用于限制类或虚函数的进一步继承或重写,旨在增强代码的安全性和可维护性。经常与override一起使用。不了解override的读者可以看这里———>C++11新特性之override-CSDN博客

2.final的用法

        (1)禁止类被继承

        将final关键字放在类名后边,可以禁止其他类继承该类。例如:

class Base final { // Base 类不能被继承 public: void func() { std::cout << "Base::func()" << std::endl; } }; // class Derived : public Base {}; // 错误:Base 是 final 类,不能继承 int main() { Base baseObj; baseObj.func(); // 输出: Base::func() return 0; }

        (2)禁止虚函数被重写

        将final关键字放在虚函数声明后面,可以进制派生类重写该函数。例如:

class Base { public: virtual void func() final { // 禁止派生类重写 func std::cout << "Base::func()" << std::endl; } }; class Derived : public Base { public: // void func() override {} // 错误:Base::func() 是 final,不能重写 }; int main() { Derived derivedObj; derivedObj.func(); // 输出: Base::func() return 0; }

        (3)override与final结合使用

        final与override一起使用,以明确表明函数是重写的,但禁止进一步的重写。例如:

class Base { public: virtual void func() { std::cout << "Base::func()" << std::endl; } }; class Derived : public Base { public: void func() override final { // 重写并禁止进一步重写 std::cout << "Derived::func()" << std::endl; } }; class FurtherDerived : public Derived { public: // void func() override {} // 错误:Derived::func() 是 final,不能重写 }; int main() { FurtherDerived obj; obj.func(); // 输出: Derived::func() return 0; }

3.final的使用场景

        (1)设计不可扩展的类。一个类设计完整,不需要被继承,可以用final。

        (2)保护关键虚函数。当某个虚函数实现已经固定,不希望派生类修改时,可以使用final。

        (3)优化性能:标记为final的类或虚函数可以帮助编译器进行优化,因为编译器知道它们不会被进一步拓展或重写了。

4.总结        

final用于禁止类被继承或虚函数被重写。

它可以增强代码的安全性和可维护性,防止意外的继承或重写。

结合 override 使用,可以更清晰地表达设计意图。

适用于设计不可扩展的类或保护关键虚函数的场景。

合理使用final,可以更好地控制类的继承层次和虚函数的行为,使代码更加健壮和易于维护。

如有错误,敬请指正!!!

标签:

C++11新特性之final由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“C++11新特性之final