final和override

文章参考:爱编程的大丙 (subingwen.cn)

1. final

C++11中提供了final关键字。

作用:

  • 写在类名后面,限制类不能被继承。
  • 写在函数后面,限制函数被重写。

1.1 限制函数

final限制的函数无法被重写。

#include <iostream>
#include <cstring>
using namespace std;

class Person{
public:
    Person(){}
    virtual void show();
};

class Student: public Person{
public:
    Student(){}
    void show() final;
};
void Student::show(){
    cout << "Student" << endl;
}

class Pupil: public Student{
public:
    Pupil(){}
    // void show();     因为Student中对该虚函数使用了final关键字,因此此处无法进行重写
};

在上述案例中,Person中的虚函数在派生类中被重写,且加上了final关键字,组织了Student的派生类Pupil继续对该函数进行重写。

1.2 限制类

final限制的类无法被继承。

class Person final{
public:
    Person(){}
    virtual void show();
};
// Student类无法通过编译
// class Student: public Person{};

在上述案例中,Student类无法通过编译,因为Person被final限制,无法被继承。

2. override

override关键字用于确保派生类中生命的重写函数和虚函数拥有相同的签名,同时明确表示将会重写虚函数,从而保证重写虚函数的正确性,提高代码可读性。和final一样,override要写在函数后面。

class Person{
public:
    Person(){}
    virtual void show();
};

class Student: public Person{
public:
    Student(){}
    void show() override;
};
void Student::show(){
    cout << "Student" << endl;
}
posted @   BinaryPrinter  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示