C++中类和对象的多态性及其基本语法讲解

简介: C++中类和对象的多态性及其基本语法讲解

在C++中,多态性是面向对象编程的三大特性之一,它允许我们使用父类类型的指针或引用来调用子类的成员函数。多态性主要分为两种:编译时多态(通过函数重载和模板实现)和运行时多态(通过虚函数和指针或引用实现)。这里我们主要讨论运行时多态,它通常涉及到虚函数和动态绑定。

 

1. 虚函数

虚函数是C++中实现多态性的关键。当基类中的成员函数被声明为虚函数时,派生类可以重写该函数。在运行时,程序会根据对象的实际类型(而不是指针或引用的类型)来调用正确的函数。

 

示例代码:

image.png

image.png

讲解:

Shape 类中声明了一个虚函数 draw,这意味着 Shape 的派生类可以重写这个函数。

Circle 和 Rectangle 类继承了 Shape 类,并各自重写了 draw 函数。

drawShapes 函数接受一个 Shape 指针数组,并调用每个指针的 draw 函数。由于 draw 是虚函数,这里实际调用的是指针所指向对象的 draw 函数实现,即多态性发生。

main 函数中创建了 Circle 和 Rectangle 的对象,并将它们的地址存储在 shapes 数组中。然后调用 drawShapes 函数来绘制这些形状。

注意,当我们使用动态分配的对象时(如本例中的 new 操作符),必须在不再需要这些对象时显式释放它们(使用 delete 操作符)。否则会导致内存泄漏。

2. 纯虚函数和抽象类

如果一个类包含纯虚函数,那么这个类就是抽象类。抽象类不能被实例化,通常用作接口,定义一组需要由派生类实现的操作。

 

示例代码:

image.png

讲解:

AbstractShape 类中声明了一个纯虚函数 draw,由于 = 0 的存在,AbstractShape 成为一个抽象类。

Circle 类继承了 AbstractShape 并提供了 draw 函数的实现。

在 main 函数中,我们不能直接实例化 AbstractShape,因为它是一个抽象类。但我们可以实例化 Circle,因为 Circle 提供了所有纯虚函数的实现。

通过

目录
相关文章
|
移动开发 前端开发 JavaScript
【值得收藏】HTML5使用多种方法实现移动页面自适应手机屏幕的方法总结
随机智能手机,平板等智能移动设备的普及。移动端是我们目前接触最多的页面展示终端,不管是对于开发者还是其他普通的使用者都是普遍的存在,而且移动终端的使用比电脑更广泛,更频繁,特别是当微信平台等变成我们日常使用工具之后。所以对于开发者来说,不管任何开发任何界面都需要着重考虑页面对移动设备的兼容以及自适应。才能让用户体验性更好。
2388 0
|
供应链 NoSQL Redis
库存预占架构升级方案设计 - 交易库存中心
伴随物流行业的迅猛发展,一体化供应链模式的落地,对系统吞吐、系统稳定发出巨大挑战,库存作为供应链的重中之重表现更为明显。近三年数据可以看出:
532 0
|
消息中间件 存储 网络协议
即时通讯需要用到哪些技术手段?
该文探讨了即时通讯技术,涉及网络协议(TCP/IP、UDP、HTTP/HTTPS)在IM中的应用,数据传输与同步(消息队列、长轮询、WebSocket、数据同步)技术,安全性保障(加密、认证授权、防止攻击)措施,以及多媒体处理(音频、视频处理和实时传输)和用户界面交互设计的重要性。文章旨在帮助读者理解并应用相关技术。
1304 1
|
缓存 运维 Java
nacos常见问题之点击下线提示报错如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
651 2
|
机器学习/深度学习 算法 数据挖掘
反向传播算法
反向传播算法
|
JSON 前端开发 测试技术
ApiPost与PostMan,你可以任选一款不错的接口管理工具
ApiPost与PostMan,你可以任选一款不错的接口管理工具
1382 0
ApiPost与PostMan,你可以任选一款不错的接口管理工具
|
算法 5G
发射分集 | 带你读《大规模天线波束赋形技术原理与设计 》之五
如果由于高速移动等原因,发送端无法及时准确地获取信道的状态信息, 或者对于某些数据或控制信息而言,对其传输可靠性的要求超过了对传输速率 和容量的需求,这时可以利用并行的数据通道分别传送具有一定冗余度的信息。
发射分集 | 带你读《大规模天线波束赋形技术原理与设计 》之五
|
SQL 关系型数据库 MySQL
实时计算 Flink版产品使用问题之全量和增量同步数据的一致性、不丢失和不重复读取可以通过什么方式保证
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
人工智能 边缘计算 自然语言处理
500页招股书解码“硬科技”依图:转型算力厂商,抢占“AI第一股”
500页招股书解码“硬科技”依图:转型算力厂商,抢占“AI第一股”
696 0

热门文章

最新文章

下一篇
开通oss服务