关键字:
override: 确保成员函数为虚并覆盖基类的虚函数
- 用于标注在派生类函数中
- 该函数必须和基类的函数有相同的签名(即参数,返回值,const等一致)
- 在基类中,该函数必须声明为virtual
final: 一旦成员虚函数被声明为final,派生类不能再覆盖它
- 表面它的派生类不能再覆盖写该成员函数;
- 该函数在其基类声明必须为virutal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15struct A
{
virtual void foo();
void bar();
void foo2();
};
struct B : A
{
void foo() const override; // 错误: B::foo 不覆写 A::foo
// (签名不匹配)
void foo() override; // OK : B::foo 覆写 A::foo
void bar() override; // 错误: A::bar 非虚
void foo2(); // OK, 运行多态时不能覆盖基类函数
};
1 | struct Base |
NULL 与 nullptr
- NULL是一个宏,值为0;
- typedef decltype(nullptr) nullptr_t;
1 | void foo(int); // (1) |
关联关系(人与气候),聚合关系(人与人群)、组合关系(人和脑袋),依赖关系(人和空气)