C++教程:理解与实践多态与继承的关键技术
需积分: 3 116 浏览量
更新于2024-08-24
收藏 132KB PPT 举报
在C++程序设计教程(第二版)第十二章“多态”中,作者探讨了面向对象编程中的一个重要概念——继承和多态性。章节内容围绕以下几个关键知识点展开:
1. **继承与多态的召唤**:
- 继承是一种将一个类(子类)从另一个类(基类)继承特性的方式,形成一种层次结构。在代码示例中,`Student` 类是 `GraduateStudent` 的祖先,通过继承关系,`Student` 类可以访问和使用 `GraduateStudent` 的属性和方法。然而,这种关系并非对称的,即 `Student` 不一定是 `GraduateStudent` 的一种,反之则不然。
2. **子类对象赋值给父类对象**:
- 当我们将一个子类对象赋值给父类类型的变量时,虽然语法上允许,但会导致子类对象的实例化被替换为父类的引用,子类特有的性质丢失。例如,`Student s = gs;` 这行代码会将 `gs` 的信息隐式转换为 `Student` 类型,使得 `gs` 对象不再保留其研究生的身份。
3. **动态类型转换(Casts)**:
- 使用 `static_cast` 进行类型转换是确保正确地在不同类型的对象间传递职责的关键。如 `pS = static_cast<Student*>(&gs);` 是正确的,因为指向 `Student` 的指针可以指向 `GraduateStudent` 对象。然而,尝试反过来转换 `pGS = static_cast<GraduateStudent*>(&s);` 将会失败,因为 `s` 实际上是 `Student` 类型,无法隐式升级到 `GraduateStudent` 类型。
4. **多态性实现**:
- 多态性允许同一个函数调用在不同类型的对象上有不同的行为。在示例中,`void display()` 方法在 `Student` 和 `GraduateStudent` 类中实现了不同的功能,显示不同的身份。当分别调用 `ds.display()` 和 `gs.display()` 时,输出结果反映了各自对象的真实类型。
5. **同化效应(Substitution Principle)**:
- 在多态的上下文中,如果一个 `Student` 类型的对象被赋值了一个 `GraduateStudent` 对象,那么对 `s` 执行 `display()` 方法仍然会输出 `UnderGraduate`,因为 `s` 保持了 `Student` 类型,即使它实际包含了更多的信息。
本节内容深入讨论了C++中继承、多态、类型转换及其在实际编程中的应用,强调了在处理子类对象和父类引用时要遵循类型特性和多态原则,以确保程序的正确性和灵活性。
2017-02-21 上传
2010-11-03 上传
2009-07-22 上传
2023-12-15 上传
2023-05-08 上传
2023-11-23 上传
2023-09-04 上传
2023-05-27 上传
2023-04-01 上传
劳劳拉
- 粉丝: 20
- 资源: 2万+
最新资源
- 构建基于Django和Stripe的SaaS应用教程
- Symfony2框架打造的RESTful问答系统icare-server
- 蓝桥杯Python试题解析与答案题库
- Go语言实现NWA到WAV文件格式转换工具
- 基于Django的医患管理系统应用
- Jenkins工作流插件开发指南:支持Workflow Python模块
- Java红酒网站项目源码解析与系统开源介绍
- Underworld Exporter资产定义文件详解
- Java版Crash Bandicoot资源库:逆向工程与源码分享
- Spring Boot Starter 自动IP计数功能实现指南
- 我的世界牛顿物理学模组深入解析
- STM32单片机工程创建详解与模板应用
- GDG堪萨斯城代码实验室:离子与火力基地示例应用
- Android Capstone项目:实现Potlatch服务器与OAuth2.0认证
- Cbit类:简化计算封装与异步任务处理
- Java8兼容的FullContact API Java客户端库介绍