重写 覆盖 final override

一、概念

目前理解这个概念只在类继承中出现;当在作用域嵌套中,应该也会出现重写的概念,比如内部命名空间重写了外部命名空间中的函数;

二、阻止类被继承(关键字final)

1、形式一

class NoDerived final { /* */ };  //NoDerived不能作为基类

2、形式二

class Last final : Base { /*  */ }; //Last不能作为基类

三、阻止覆盖函数(关键字final;注意:这里并非虚函数)

struct D2 : B {
    //从B继承f2()和f3(),覆盖f1(int)
    void f1(int) const final; //不允许后续的其他类覆盖f1(int)
};
struct D3 : D2 {
    void f2();
    void f1(int) const; // 错误
};

三、强制覆盖子类虚函数(关键字override)

struct B {
    virtual void f1(int) const;
    virtual void f2();
    void f3();
};
struct D1 : B {
    void f1(int) const override;
    void f2(int) override;    //错误:B没有形如f2(int)的函数
    void f3() override;    //错误:f3不是虚函数
    void f4() override;    //错误:B没有名为f4的函数
};

 

posted @ 2020-09-04 11:36  kuaqi  阅读(127)  评论(0编辑  收藏  举报