说说多态,多态有几种类型,怎么实现

news2024/7/4 5:36:02

在这里插入图片描述多态有两种主要的类型:
静态多态(编译时多态)和动态多态(运行时多态)。

1、静态多态(编译时多态):
静态多态是指在编译时就确定了对象的类型、方法的调用以及绑定。常见的实现方式是函数重载和运算符重载。函数重载允许在同一个作用域内定义多个名称相同但参数类型或参数个数不同的函数,在编译时根据调用时传递的参数类型或个数来确定具体调用哪个函数。运算符重载则使用特殊的函数名和关键字来对运算符进行重新定义,使得它们能够按照自定义的方式操作对象。

2、动态多态(运行时多态):
动态多态是指在运行时根据对象的实际类型来调用相应的方法。它需要依赖继承和虚函数的机制来实现。在基类中声明虚函数,并在派生类中进行重写,从而使得在通过基类指针或引用调用虚函数时,根据实际指向的派生类对象来动态选择调用哪个函数。这种特性称为动态绑定或后期绑定。

在C++中,可以通过使用虚函数和指针/引用来实现动态多态。具体步骤如下:

1、在基类中声明一个虚函数(通过在函数声明前添加 virtual 关键字),该函数将在派生类中进行重写。
2、创建基类指针或引用,并将其指向派生类对象。
3、通过基类指针或引用调用虚函数,系统会根据实际指向的派生类对象来动态选择调用哪个函数。

#include <iostream>
using namespace std;

class Shape {
	public:
		virtual void draw() {
			cout<<"Drawing a shape." <<endl;
		}
};

class Circle : public Shape {
	public:
		void draw() override {
			cout<<"Drawing a circle."<<endl;
		}
};

class Rectangle : public Shape {
	public:
		void draw() override {
			cout<<"Drawing a rectangle."<<endl;
		}
};

int main() {
	Circle circle;			//创建了一个名为 circle 的 Circle 类对象
	Rectangle rectangle;
	
	Shape* shapePtr1 = &circle; //& 符号可以用于获取一个对象的地址
	Shape* shapePtr2 = &rectangle; 
	
	shapePtr1->draw();   // 调用派生类的重写函数
	shapePtr2->draw();
	return 0;
	
}

在这里插入图片描述

在上述代码中,基类 Shape 声明了一个虚函数 draw()。派生类 Circle 和 Rectangle 分别重写了 draw() 函数。在 main() 函数中,通过基类指针 shapePtr1 和 shapePtr2 分别指向 Circle 和 Rectangle 对象,并调用 draw() 函数。由于该函数是虚函数且派生类进行了重写,因此会根据实际指向的对象类型来动态选择调用哪个函数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/948958.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RESTful API 面试必问

RESTful API是一种基于 HTTP 协议的 API 设计风格&#xff0c;它提供了一组规范和约束&#xff0c;使得客户端&#xff08;如 Web 应用程序、移动应用等&#xff09;和服务端之间的通信更加清晰、简洁和易于理解。 RESTful API 的设计原则 使用 HTTP 协议&#xff1a;RESTful …

函数和方法回顾、cbv源码分析、APIView执行流程分析、序列化组件介绍、序列化组件快速使用之序列化、常用字段类和参数、序列化组件之校验、字典推导式回顾

一 函数和方法回顾 函数和方法-函数:使用def关键字定义的函数,有几个参数&#xff0c;就要传几个参数&#xff0c;不能多&#xff0c;不能少-----》按位置传&#xff0c;按关键字传-方法&#xff1a;定义在类内部&#xff0c;可以自动传值的函数称之为方法---》绑定给对象的方…

RTPEngine 通过 HTTP 获取指标的方式

文章目录 1.背景介绍2.RTPEngine 支持的 HTTP 请求3.通过 HTTP 请求获取指标的方法3.1 脚本配置3.2 请求方式 1.背景介绍 RTPEngine 是常用的媒体代理服务器&#xff0c;通常被集成到 SIP 代理注册服务器中实现媒体传输的功能以减小 SIP 代理服务器的压力&#xff0c;其架构如…

ChatGPT 一条命令总结Mysql所有知识点

想学习Mysql的同学,可以使用ChatGPT直接总结mysql所有的内容与知识点大纲 输入 总结Mysql数据库所有内容大纲与大纲细分内容 ChatGPT不光生成内容,并且直接完成了思维导图。 AIGC ChatGPT ,BI商业智能, 可视化Tableau, PowerBI, FineReport, 数据库Mysql Oracle, Offi…

业务需要咨询?开发遇到 bug 想反馈?开发者在线提单功能上线!

大家是否遇到过下列问题—— 在开发的时候&#xff0c;遇到 bug 需要反馈… 有合作意向的时候&#xff0c;想更多了解业务和相关产品… 在接入的时候&#xff0c;需要得到专业技术支持… 别急&#xff0c;荣耀开发者服务平台在线提单功能上线了~ 处理问题分类说明&#xff1…

mov怎样转成mp4?简单的格式转换方法分享

将mov文件转换为MP4格式的好处是多方面的。首先&#xff0c;MP4格式相对于mov格式拥有更好的压缩效率&#xff0c;可以减小文件大小&#xff0c;从而节省存储空间和传输时间。其次&#xff0c;MP4格式是一种广泛使用的视频格式&#xff0c;几乎所有的设备和平台都支持MP4格式&a…

【跟小嘉学 Rust 编程】二十、进阶扩展

系列文章目录 【跟小嘉学 Rust 编程】一、Rust 编程基础 【跟小嘉学 Rust 编程】二、Rust 包管理工具使用 【跟小嘉学 Rust 编程】三、Rust 的基本程序概念 【跟小嘉学 Rust 编程】四、理解 Rust 的所有权概念 【跟小嘉学 Rust 编程】五、使用结构体关联结构化数据 【跟小嘉学…

没有永远的王者…Zig替代C,将成定局!

新语言的出现&#xff0c;真的能威胁到老牌语言吗&#xff1f;或许&#xff0c;真的没有永远的王者。就像最近春风得意的Mojo&#xff0c;LLVM之父Chris Lattner称其不会威胁到 Python&#xff0c;但会让C等语言感到恐惧。 新语言层出不穷之时&#xff0c;旧语言的中年危机就会…

TSN协议解读系列 | (1) 帧抢占:br老先生的旅途

帧抢占协议还是怀念以前那个车马很慢&#xff0c;书信很远&#xff0c;带宽顶天也就几十兆的年代。 ▎旧时代的辉煌 1983年秋&#xff0c;IEEE 802.3大学正式成立&#xff0c;这所大学遵循的是严格的标准化管理&#xff0c;数据包们的衣食住行都需要符合学校的规定&#xff0…

SpringBoot + layui 框架实现一周免登陆功能

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

便携式明渠流量计工作原理

便携式明渠流量计工作原理是什么&#xff1f; 简单来说便携式明渠流量计是一种用于测量明渠水流量的仪器。它的工作原理基于流速-水位关系&#xff0c;通过测量水流速度和水位差来计算明渠的流量。 具体原理如下&#xff1a; 1.测量水流速度&#xff1a;通常使用悬挂在水中的水…

Kubernetes快速进阶与实战:构建可靠的容器化应用平台

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 1. 什么是Kubernetes&am…

企业面临的IP风险,如何应对?

IP风险画像为企业或组织在知识产权领域面临的潜在风险和威胁的综合概览。通过对相关知识产权的保护和管理&#xff0c;企业可以预测和应对潜在的法律、商业和声誉风险。 IP数据云帮助企业更好地了解和应对知识产权方面的风险。并提供了关于当前全球知识产权环境的重要信息&…

Yolov8原理详细解析!一文看懂

引言 Yolo(You Only Look Once)是一种one-stage目标检测算法&#xff0c;即仅需要 “看” 一次就可以识别出图片中物体的class类别和边界框。Yolov8是Ultralytics公司最新推出的Yolo系列目标检测算法&#xff0c;可以用于图像分类、物体检测和实例分割等任务。 根据官方描述&…

linux添加sht3x温湿度传感器驱动记录

最近拿到一块imx6ull板子&#xff0c;上面有一颗温湿度传感器sht30,需要读取其数值。本人能力有限&#xff0c;自己写驱动还有一点困难&#xff0c;好在 linux内核里自带了很多器件的驱动&#xff0c;只需要找到相关的驱动文件根据要求修改一下设备树、添加进内核里编译就可以。…

【ES】Elasticsearch 常见的简单查询

查看es中有哪些索引 请求方式&#xff1a;GET 请求地址&#xff1a;http://localhost:9200 /_cat/indices?v 参数&#xff1a;无 结果&#xff1a; 查看索引全部数据 请求方式&#xff1a;GET 请求地址&#xff1a;http://localhost:9200/index-2023-08/_search 参数&a…

VUE之jspreadsheet电子excel表格实时动态高度设置

问题&#xff1a;excel电子表格在不同屏幕大小下横向滚动条会被遮挡 排查原因&#xff1a;由于excel高度固定导致 解决方法&#xff1a;设计页面较多&#xff0c;所以封装公共方法 步骤&#xff1a; 1.使用混入封装动态设置excel高度方法&#xff1a; const mixinJexcel …

MySQL行格式 又称 记录格式

行格式 ROW_formate compact 行格式dynamic 行格式 默认compress 行格式 行格式定义 创建表同时指定行格式 create table 表明 ( 列的信息) row_formate行格式名称 修改行格式 alter table 表明 ROW_FORMATE 行格式名称 查看mysql8.0 默认行格式 select innodb_default_row_…

HTTP状态码504(Gateway Timeout)报错原因分析和解决办法

文章目录 504报错原因分析一、用户角度1. 代理服务器问题2. 网络问题 二、网站管理员角度1. 服务器负载过重2. 网关配置问题3. 目标服务器响应慢4. IIS/nginx/apache服务关闭5. 维护或故障6. 数据库的慢处理也会导致504 用户角度可以采取哪些措施解决504错误1. 刷新页面2. 检查…

Viobot定位用于导航

注&#xff1a;此教程以轮式机器人作为一个样例&#xff0c;具体的应用还需要用户自己去做更深入的开发。当然&#xff0c;着并不是唯一的方法&#xff0c;有更好的方法也欢迎大家讲一下自己的思路&#xff0c;有什么说错的地方也欢迎大家批评指正。 路径规划部分我们选用轮式机…