final和override
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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!