这是一篇关于讲解关于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;
}

上述代码,编译没问题,但是尽可能不使用和说明符冲突的函数名