zoukankan      html  css  js  c++  java
  • C++:override和final

    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
    {
    };

      

    ------------ 转载请注明出处 ------------
  • 相关阅读:
    前端学习之JavaScript
    前端学习之CSS
    前端学习之HTML
    MySQL多表查询(重要)
    C# 基本语法
    第 9 章 —— 原型模式
    第 7 章 —— 代理模式
    第 6 章 —— 装饰模式
    将搜索关键词加红
    SQL Server 创建触发器(trigger)
  • 原文地址:https://www.cnblogs.com/whlook/p/6501918.html
Copyright © 2011-2022 走看看