final和override

发布时间 2023-12-04 16:59:04作者: Beasts777

文章参考:爱编程的大丙 (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;
}