C++:override和final

来源:互联网 发布:dnf游戏数据异常严重吗 编辑:程序博客网 时间:2024/05/19 10:16
1. override 重载

  当你在父类中使用了虚函数时候,你可能需要在某个子类中对这个虚函数进行重写,以下方法都可以:

class A{    virtual void foo();}class B :public A{    void foo(); //OK    virtual foo(); // OK    void foo() override; //OK}

  如果不使用override,当你手一抖,将foo()写成了f00()会怎么样呢?结果是编译器并不会报错,因为它并不知道你的目的是重写虚函数,而是把它当成了新的函数。如果这个虚函数很重要的话,那就会对整个程序不利。

  所以,override的作用就出来了,它指定了子类的这个虚函数是重写的父类的,如果你名字不小心打错了的话,编译器是不会编译通过的:

class A{    virtual void foo();};class B :A{    virtual void f00(); //OK    virtual void f0o()override; //Error };

  为了减少程序的运行时错误,还是养成重写虚函数加上override的习惯吧。

2.final

  当不希望某个类被继承,或不希望某个虚函数被重写,可以在类名和虚函数后添加final关键字,添加final关键字后被继承或重写,编译器会报错。例子如下:

class Base{    virtual void foo();}; class A : Base{    void foo() final; // foo 被override并且是最后一个override,在其子类中不可以重写    void bar() final; // Error: 父类中没有 bar虚函数可以被重写或final};class B final : A // 指明B是不可以被继承的{    void foo() override; // Error: 在A中已经被final了}; class C : B // Error: B is final{};

 

  

原创粉丝点击