15.2.1 定义基类
- 派生类可以继承定义在基类中的成员,但是派生类的成员函数不一定有权访问从基类继承而来的成员。和其他使用基类的代码一样,派生类能访问公有成员,而不能访问私有成员。
15.2.2 定义派生类
- 声明派生类,声明中更包含类名但是不能包含它的派生类列表
class NoDerived final {/*..*/}//防止继承
15.3 虚函数
- 所有虚函数都必须有定义
- 把某个函数指定为final,则之后任何尝试覆盖该函数的操作都将引发错误
15.4 抽象基类
- 一个纯虚函数无须定义,=0只能出现在类内部的虚函数的声明语句处。
- 含有纯虚函数的类是抽象基类。
15.5 访问控制与封装
- 派生类的成员和友元只能访问派生类对象中的基类部分的受保护成员。对于普通的基类对象中的成员不具有特殊的访问权限
- **
对于代码中某个给定节点来说,如果基类的公有成员是可访问的,则派生类向基类的类型转换也是可访问的;反之则不行
**
- 不能继承友元关系;每个类负责控制各自成员的访问权限;基类友元对基类的访问权限友基类本身控制,即使对于派生类的基类部分也是如此
- pal是base的友元,因此pal能访问base的成员,这种可访问性包括了base对象内嵌在其派生类对象中的情况
- 通过在类的内部使用using声明语句,我们可以将该类的直接或间接基类中的任何可访问成员(非私有成员)标记出来。
15.6 继承中的类作用域
- 派生类的作用域嵌套在其基类的作用域之内
- 一个对象、指针、引用的静态类型决定了该对象的哪些成员是可见的
- 名字查找先于类型检查
- 覆盖重载的函数。。。。没看
15.7.1 虚析构函数
- 一个基类总是需要虚析构函数,而不用非得需要拷贝和赋值操作(三五法则的重要例外)
- 虚析构函数将阻止合成移动操作,则其派生类中移动操作都是删除的
- 派生类析构函数值负责销毁有派生类自己分配的资源
15.8 容器与继承
- 容器和存在继承关系的类型无法兼容
- 在容器中放置智能指针而非对象,在容器中存放基类的指针(智能指针)
- 类内初始值必须使用“=”or “{ }”