这是一篇关于讲解关于final和override说明符的使用问题,在c++11被引入,final和override修饰符主要用在继承中,修饰虚函数,final也可以修饰类。
1. final说明符修饰类成员函数的含义
final说明符的含义:指定某个虚函数不能在派生类中被覆写。
2. override说明符修饰类成员函数的含义
override说明符含义:显示地声明一个函数是覆盖了另一个虚函数,一般用在子类覆写父类虚函数,在子类函数中显示声明,不能修饰基类虚函数
#include <iostream>
class Parent {
public:
explicit Parent(int Xdata) {
data = Xdata;
std::cout << "Parent 构造函数" << std::endl;
}
~Parent() {
std::cout << "Parent 的析构函数" << std::endl;
}
virtual void needWrite(); //虚函数,需要被子类重写
virtual void needNtWrite() final; //虚函数不希望被子类重写
public:
int data;
};
class Son :public Parent {
public:
explicit Son(int Xdata)
:Parent(Xdata) {
std::cout << "Son 的构造函数" << std::endl;
}
~Son() {
std::cout << "Son 的析构函数" << std::endl;
}
void needWrite() override; //显示地声明该函数是重写父类的虚函数
//void needNtWrite(); //会报错,因为该函数被final修饰
};
int main() {
return 0;
}
3.final说明符修饰类时候的含义
final修饰类时,在类定义时,在类名的后边,被final修饰的类表示该类不可以被继承,override说明符不能修饰类,只能修饰类成员函数。
class uStudent final{
public:
explicit uStudent(){
}
public:
void getAge();
}
/*****************************
类uStudent被final修饰符修饰,因此类uStudent不能被作为基类去继承
*****************************/
- [*] 若类的定义在类内,final和override说明符应该在声明符之后函数体之前
class Entry{
public:
explicit Entry(){
}
public:
virtual void Example() final{
std::cout<<"this is an example "<<std::endl;
}
};
- [ 1 ] final和override只在修饰类定义或类成员函数时有意义,其余语境中未保留 - [ 2 ] final修饰符存在的意义:在一定程度上阻止了类的无限继承
/************************************使用final/override作为函数名******************/
void final(){
std::cout<<"final function"<<std::endl;
}
void override(){
std::cout<<"override function"<<std::endl;
}
上述代码,编译没问题,但是尽可能不使用和说明符冲突的函数名