CPP11特性之explicit、final和override

explicit

explicit专用于修饰构造函数,表示只能显式构造,不可以被隐式转换,根据代码看explicit的作用:

1
2
3
4
5
6
7
8
9
10
11
struct A {
explicit A(int value) {
cout << "value" << endl;
}
};

int main() {
A a = 1; // error,不可以隐式转换
A aa(2); // ok
return 0;
}

final&override

c++11关于继承新增了两个关键字,final用于修饰一个类,表示禁止该类进一步派生和虚函数的进一步重载,override用于修饰派生类中的成员函数,标明该函数重写了基类函数,如果一个函数声明了override但父类却没有这个虚函数,编译报错,使用override关键字可以避免开发者在重写基类函数时无意产生的错误。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
struct Base {
virtual void func() {
cout << "base" << endl;
}
};

struct Derived : public Base{
void func() override { // 确保func被重写
cout << "derived" << endl;
}

void fu() override { // error,基类没有fu(),不可以被重写

}
};