C++面向对象程序设计:多态中的重载、覆盖与隐藏
需积分: 49 81 浏览量
更新于2024-07-14
收藏 1.95MB PPT 举报
"C++中的重载、覆盖与隐藏是面向对象程序设计中的核心概念,尤其是在多态性方面。多态允许不同的类对同一方法有不同的实现,从而提高代码的灵活性和可扩展性。本章主要介绍了三个关键概念:继承、虚函数和抽象类。
7.1 继承呼唤多态
继承是面向对象编程的基础特性之一,通过继承,子类可以从父类那里继承属性和行为。在C++中,`class GraduateStudent : public Student` 表示`GraduateStudent`类是从`Student`类派生的。这种关系允许`GraduateStudent`类具有`Student`类的所有成员,同时可以添加或修改自己的成员。派生类的对象可以赋值给基类对象,如`Student s = GraduateStudent gs;`,这就是所谓的赋值兼容规则。
7.2 虚函数
虚函数是实现多态的关键。在基类中声明一个虚函数,如`virtual void display()`,意味着在派生类中可以覆盖这个函数,提供不同的实现。在上面的例子中,`Student`和`GraduateStudent`都定义了`display()`函数,`GraduateStudent`的`display()`覆盖了`Student`的`display()`。当通过基类指针调用`display()`时,调用的实际函数取决于指针指向的对象类型,而非指针本身的类型。例如,`Student *ps = &gs; ps->display();`将调用`GraduateStudent`的`display()`。
7.3 纯虚函数与抽象类
纯虚函数(`virtual void func() = 0;`)定义了一个接口,但没有提供实现。包含纯虚函数的类称为抽象类,不能实例化,通常作为其他派生类的基类,确保它们必须实现纯虚函数。抽象类用于定义类族的共同接口,使得类家族具有统一的操作方式。
同化效应
在C++中,赋值操作`s = gs;`会导致`s`指向的对象(原本是`Student`对象)的行为变为`GraduateStudent`对象的行为,即`s.display()`会输出`GraduateStudent`。然而,`s`仍然是`Student`类型的,因此它只能访问`Student`类的成员,无法访问`GraduateStudent`特有的成员。这种现象称为同化效应,它也适用于指针,如`Student *pgs = &s;`,虽然`pgs`指向的是`Student`对象,但实际上它是指向`GraduateStudent`对象的,但由于类型是`Student *`,只能调用`Student`类的成员。
在实际编程中,理解这些概念非常重要,因为它们构成了C++多态性的基础,允许我们编写更加灵活和可维护的代码。通过继承、虚函数和抽象类,我们可以设计出层次结构清晰、功能丰富的类家族,有效地管理复杂系统中的各种对象。"
2013-04-12 上传
111 浏览量
2023-07-01 上传
2023-07-17 上传
2022-08-08 上传
2021-09-30 上传
2021-09-30 上传
点击了解资源详情
点击了解资源详情
涟雪沧
- 粉丝: 20
- 资源: 2万+
最新资源
- 探索数据转换实验平台在设备装置中的应用
- 使用git-log-to-tikz.py将Git日志转换为TIKZ图形
- 小栗子源码2.9.3版本发布
- 使用Tinder-Hack-Client实现Tinder API交互
- Android Studio新模板:个性化Material Design导航抽屉
- React API分页模块:数据获取与页面管理
- C语言实现顺序表的动态分配方法
- 光催化分解水产氢固溶体催化剂制备技术揭秘
- VS2013环境下tinyxml库的32位与64位编译指南
- 网易云歌词情感分析系统实现与架构
- React应用展示GitHub用户详细信息及项目分析
- LayUI2.1.6帮助文档API功能详解
- 全栈开发实现的chatgpt应用可打包小程序/H5/App
- C++实现顺序表的动态内存分配技术
- Java制作水果格斗游戏:策略与随机性的结合
- 基于若依框架的后台管理系统开发实例解析