final
final 是 C++11 新标准的一个关键字!
只有支持C++11新标准的IDE才可以使用!
final 有什么作用?
- 用来修饰类,使该类不能被继承;
- 用来修饰类的虚函数,使得该虚函数在子类中,不能被重写。
理解:终结fianl所修饰过的任何东西。
一、用来修饰类,使该类不能被继承
代码:
#include <iostream>
class XiaoMi {
};
class XiaoMi_2 final : public XiaoMi { // 使用final修饰XiaoMi_2,使其不能再派生出任何子类
};
class XiaoMi_3 : public XiaoMi_2 { // 错误,不能使用XiaoMi_2作为基类
};
二、用来修饰类的虚函数,使得该虚函数在子类中,不能被重写
代码:
#include <iostream>
class XiaoMi {
virtual void func() final; // 使用final修饰虚函数,使其派生出的子类不能再重写,但是可以继承使用!
};
class XiaoMi_2 final : public XiaoMi {
virtual void func(); // 错误,子类不能再重写func()
};
override
override仅能用于修饰虚函数。
override 有什么作用?
- 提示程序的阅读者,这个函数是重写父类的功能;
- 防止程序员在重写父类的函数时,把函数名写错。
代码:
#include <iostream>
class XiaoMi {
virtual void func();
};
class XiaoMi_2 : public XiaoMi {
virtual void func() override; // 使用override修饰func()函数
// 告诉程序员func()是重写父类的虚函数
// 如果把虚函数名字写错:
// virtual void func1() override; // 错误, 应为父类没有func1()这个虚函数
};
// 另外,override只需再声明中写,不需要在函数的实现中使用
void XiaoMi_2::func() override { // 错误,无需再写override
std::cout << "XiaoMi_2::func()" << std::endl;
}
// override只需在函数声明中使用,不需要在函数的实现中使用
总结:
在写代码中,应养成写override的习惯,这样有助于防止写错!