final和override关键字
final
和override
是C++11引入的两个关键字,主要用于类的继承和虚函数的覆盖。
- final:如果一个类被声明为
final
,那么它不能被继承。例如,class Base final { ... };
,此时任何试图继承Base
的类都会导致编译错误。此外,如果一个虚函数被声明为final
,那么它不能在派生类中被覆盖。例如,virtual void fun() final;
,此时任何派生类试图覆盖fun()
函数都会导致编译错误。 -
override:如果一个虚函数被声明为
override
,那么编译器会检查这个函数是否真的覆盖了基类中的一个虚函数。如果没有,编译器会报错。这个关键字可以帮助我们避免因为拼写错误或者函数签名错误而导致的错误。例如,void fun() override;
,如果基类中没有一个函数的签名和fun()
完全匹配,那么编译器就会报错。
例如,假设我们有一个基类Animal
和一个派生类Dog
。Animal
有一个虚函数make_sound()
,Dog
需要覆盖这个函数。如果我们在Dog
的make_sound()
函数声明中加上了override
关键字,那么如果我们不小心将函数名拼写成了mkae_sound()
,编译器就会因为找不到对应的基类函数而报错,帮助我们及时发现错误。