概述
动态绑定:
定义基类和派生类
派生类对象概念模型:
允许将基类指针或引用绑定到派生类对象的基类部分上
派生类的构造函数:
将某个类用作基类,则该类必须已经定义
final关键字阻止继承:
静态类型:编译时已知的类型
动态类型:表示内存中的对象类型,运行时才知道类型
- 不存在类型转换:
当基类的构造函数传递一个派生类对象时,构造函数只处理基类自己的成员
虚函数
当使用指针或引用调用虚函数时执行动态绑定(运行时解析),否则都在编译时进行解析
虚函数不能为构造函数或者静态函数
- 派生类的虚函数
基类申明处添加virtual关键词,派生类隐式地也是虚函数
- override:
override关键字:显示注明使用哪个成员函数改写基类的虚函数
只有虚函数能够添加override说明符
final不允许基类函数进行覆盖:
- 利用作用域阻止虚函数的动态绑定:
抽象基类
- 纯虚函数:
含有纯虚函数的类是抽象类,负责定义接口
抽象类不能创建对象
访问控制与继承
- 友元与继承:
友元关系不能被继承
如果Pal是基类的友元,它可以访问基类对象内嵌在其派生类对象中的部分
- 改变可访问性
- 默认的继承保护级别:
struct:public
class:private
继承中的类作用域
编译时的名字查找:
派生类通过基类的作用域查找被覆盖的基类成员:
构造函数与拷贝控制
- 虚析构函数:
基类通常定义虚析构函数
- 构造函数:
先运行基类的构造函数,后运行派生类的构造函数
继承基类的构造函数:
- 析构函数:
先运行派生类的析构函数,后运行基类的析构函数