- 29
- 0
- 约1.52万字
- 约 72页
- 2017-06-13 发布于湖北
- 举报
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * “is-a”举例 class Truck: public Automobile{ //卡车 public: void load(…); //装货 void dump(…); //卸货 private: …… }; class Pumper: public Automobile { //消防车 public: void water(); //喷水 private: …… }; 意义 卡车是汽车 消防车是汽车 接口 卡车和消防车具有汽车的通用功能(移动) 它们还各自具有自己的功能(卡车:装货、卸货;消防车:喷水) * 深 度 探 索 派生类对象的内存布局 派生类对象的内存布局 因编译器而异 内存布局应使类型兼容规则便于实现 一个基类指针,无论其指向基类对象,还是派生类对象,通过它来访问一个基类中定义的数据成员,都可以用相同的步骤 不同情况下的内存布局 单继承:基类数据在前,派生类新增数据在后 多继承:各基类数据按顺序在前,派生类新增数据在后 虚继承:需要增加指针,间接访虚基类数据 * 深 度 探 索 单继承情形 class Base { … }; class Derived: public Base { … }; Derived *pd = new Derived(); Base *pb = pd; * Derived类型指针pd转换为Base类型指针 时,地址不需要改变 Base类 数据成员 Derived类新增 数据成员 pb, pd Derived对象 深 度 探 索 多继承情形 class Base1 { … }; class Base2 { … }; class Derived: public Base1, public Base2 { … }; Derived *pd = new Derived(); Base1 *pb1 = pd; Base2 *pb2 = pd; * Derived类型指针pd转换为Base2类型指针 时,原地址需要增加一个偏移量 Base1类 数据成员 Base2类 数据成员 pb1, pd Derived对象 pb2 Derived类新增 数据成员 深 度 探 索 虚拟继承情形 class Base0 { … }; class Base1: virtual public Base0 { … }; class Base2: virtual public Base0 { … }; class Derived: public Base1, public Base2 { … }; Derived *pd = new Derived(); Base1 *pb1 = pd; Base2 *pb2 = pd; Base0 *pb0 = pb1; * Base0类数据成员 Base1类新增 数据成员 pb1, pd Base0指针 Base1类新增 数据成员 Base0指针 Derived对象 pb2 pb0 通过指针间接访问虚基类的数据成员 深 度 探 索 基类向派生的转换 基类向派生类的转换 基类指针可以转换为派生类指针 基类引用可以转换为派生类引用 需要用static_cast显式转换 例: Base *pb = new Derived(); Derived *pd = static_castDerived *(pd); Derived d; Base rb = d; Derived rb = static_castDerived (rb); * 深 度 探 索 类型转换时的注意事项(1) 基类对象一般无法被显式转换为派生类对象 对象到对象的转换,需要调用构造函数创建新的对象 派生类的拷贝构造函数无法接受基类对象作为参数 执行基类向派生类的转换时,一定要确保被转换的指针和引用所指向或引用的对象符合转换的目的类型: 对于Derived *pd = static_castDerived *(pb); 一定要保证pb所指向的对象具有Derived类型,或者是Derived类型的派生类。 * 深 度 探 索 类型转换时的注意事项(2) 如果A类型是B类型的虚拟基类,A类型指针无法通过static_cast隐含转换为B类型的指针 可以结合虚继承情况下的对象内存布局,思考为什么不允许这种转换 void指针参加的转换,可能导致不可预期的后果: 例:(Base2是Derived的第二个公共基类) Derived *pd = new Derived(); void *pv = pd; //将Derived指针转换为void指针 Base2 *
您可能关注的文档
最近下载
- 项目可行性研究报告大纲.pptx VIP
- 小学体育五年级下册教案(最全).doc VIP
- 照顾老人保姆合同范本10篇.docx VIP
- 图形推理专项练习题.FIT).pdf VIP
- 《钢轨超声波探伤系统的设计》【毕业设计论文】.doc VIP
- 2022年广东高考生物试卷真题及答案详解(精校版).pdf VIP
- Panasonic 松下 录像机 DMR-EH59 DMR-EH49 Operating Instructions 操作手册说明书 (英语).pdf
- 迪罗—特马法纤维开松混合设备机械原理.pdf VIP
- 高考英语单词3500乱序版.pdf VIP
- 2024年新课标高考福建高考真题生物试卷(原卷版).docx VIP
原创力文档

文档评论(0)