override:
当重载虚函数时,显式的告诉编译器进行重载,编译器就会检查基函数是否存在这样的虚函数,如果没有就会编译错误:
class Base {
public:
virtual void foo(int x) ;
};
class Subclass : Base {
void foo(int x) override ;//合法,因为基类有与之匹配的虚函数
void foo(float y) override;//错误因为基类中没有和这个匹配的虚函数
};
final:
是为防止类被继续继承以及终止虚函数继续重载。
class A{
virtual void foo( ) final;//接下来的类将不能重载这个虚函数
};
class B final :public A {//接下来的类将不能继承 B 类,它已经被终止继承了
};
default :主要用于显式声明要有编译器生成的构造函数
(因为我们自己没有提供,编译器会默认为对象生成默认构造函数、复制构造、赋值运算符、析构函数,我们不能精确控制默认函数的生成行为。当然可以通过把它们声明为么有的也可以达到目的,但新特性提供了 delete来让我们更方便的控制默认函数的生成行为;还有就是我们提供了构造函数,编译器就不会再提供默认构造函数,如果想让这两个现时存在就得使用关键字 default )
delete : 显式声明拒绝编译器生成构造
class C {
public :
C() = default; //显式声明使用编译器生成的构造函数
C& operator=(const C&) = delete;//显式声明拒绝编译器生成构造
};