当前位置: 首页 > news >正文

C++的多态(Polymorphism)

C++中的多态(Polymorphism)是面向对象编程的一个重要概念,它允许以不同的方式使用同一个接口来处理不同类型的对象。多态性可以通过函数重载、运算符重载和虚函数实现。

多态的基本概念是:通过基类的指针或引用,可以在运行时动态地确定所调用的函数,从而实现不同类型的对象的特定行为。

  1. 静态多态性(静态多态):
    静态多态性是通过函数重载和运算符重载实现的。在编译时期,根据函数或运算符的参数类型或个数,选择调用对应的函数或运算符。

示例:

class MyClass {
public:void display(int num) {cout << "Displaying an integer: " << num << endl;}void display(double num) {cout << "Displaying a double: " << num << endl;}
};int main() {MyClass obj;obj.display(10);      // 调用 void display(int num)obj.display(3.14);    // 调用 void display(double num)return 0;
}

在上述示例中,MyClass 类定义了两个重载的 display 函数,一个接受整数参数,一个接受浮点数参数。在 main 函数中,我们通过对象 obj 调用 display 函数,编译器根据实参的类型自动选择调用合适的函数。

  1. 动态多态性(动态多态):
    动态多态性是通过虚函数和基类的指针或引用实现的。在运行时期,根据实际对象的类型,动态地确定调用的函数。

示例:

class Animal {
public:virtual void makeSound() {cout << "Animal is making a sound." << endl;}
};class Dog : public Animal {
public:void makeSound() override {cout << "Dog is barking." << endl;}
};class Cat : public Animal {
public:void makeSound() override {cout << "Cat is meowing." << endl;}
};int main() {Animal* animal1 = new Dog();Animal* animal2 = new Cat();animal1->makeSound();   // 调用 Dog 的 makeSound() 函数animal2->makeSound();   // 调用 Cat 的 makeSound() 函数delete animal1;delete animal2;return 0;
}

在上述示例中,Animal 类是基类,Dog 类和 Cat 类是派生类。基类中的 makeSound 函数声明为虚函数,并在派生类中进行了重写。在 main 函数中,我们使用基类的指针 animal1animal2 分别指向派生类的对象 DogCat,然后通过这些指针调用 makeSound 函数。在运行时期,根据指针所指向的对象的实际类型,动态地确定调用的函数。

动态多态性通过虚函数实现了运行时多态,使得程序可以根据实际对象的类型来确定调用的函数,从而实现了灵活的对象行为。


总结:
多态性是面向对象编程的重要特性之一,它允许以不同的方式处理不同类型的对象。静态多态通过函数重载和运算符重载实现,而动态多态通过虚函数和基类的指针或引用实现。多态性提高了代码的灵活性和可扩展性,使得程序可以根据实际情况进行动态决策。

相关文章:

C++的多态(Polymorphism)

C中的多态&#xff08;Polymorphism&#xff09;是面向对象编程的一个重要概念&#xff0c;它允许以不同的方式使用同一个接口来处理不同类型的对象。多态性可以通过函数重载、运算符重载和虚函数实现。 多态的基本概念是&#xff1a;通过基类的指针或引用&#xff0c;可以在运…...

coding持续集成构建环境自定义node版本

coding持续集成构建环境自定义node版本 解决方案 只需要在构建计划的编写过程中增加一个如下的 stage&#xff0c;具体 nodejs 版本下载地址可参考 https://nodejs.org/en/download/releases/ 这里。 stage(toggle Node.js version) {steps {sh rm -rf /usr/lib/node_modules…...

【Java程序设计】【C00252】基于Springboot的实习管理系统(有论文)

基于Springboot的实习管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的实习管理系统 本系统分为前台功能模块、管理员功能模块、教师功能模块、学生功能模块以及实习单位功能模块。 前台功能模块&#xf…...

100条经典C语言题第一天(1-10)

准备复习一下C语言&#xff0c;刷一些和面试相关的问题。 请填写 bool, float, 指针变量 与 “零值”比较的if语句 A.Bool flag 与 “零值”比较的if语句 1为true 0为false 分析 这里的flag 是布尔类型的变量 标准…...

传输频宽是啥?对网速影响有多大?

频宽&#xff0c;即WIFI频道宽度&#xff0c;又称为WIFI信道宽度&#xff0c;是WiFi Channel width的缩写。从科学的定义来说&#xff0c;Wi-Fi频道宽度&#xff0c;是指Wi-Fi无线信号在频谱上所占用的带宽大小。它决定了Wi-Fi网络的数据传输速率和稳定性&#xff0c;一般有20M…...

【C++函数探幽】内联函数inline

&#x1f4d9; 作者简介 &#xff1a;RO-BERRY &#x1f4d7; 学习方向&#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;欢迎各位关注&#xff0c;谢谢各位的支持 目录 1. 前言2.概念3.特性…...

C#面:什么是Code-Behind技术

Code-Behind技术是一种在Web开发中常用的技术&#xff0c;它将前端页面与后端代码分离&#xff0c;使得前端页面的设计和后端代码的逻辑处理可以分别进行。在Code-Behind模式下&#xff0c;前端页面通常是一个标记语言&#xff08;如HTML或ASPX&#xff09;&#xff0c;而后端代…...

【ES6】Promise

Promise 回调地狱 const fs require(fs);fs.readFile(./a.txt, utf-8, (err, data) > {if(err) throw err;console.log(data);fs.readFile(./b.txt, utf-8, (err, data) > {if(err) throw err;console.log(data);fs.readFile(./c.txt, utf-8, (err, data) > {if(er…...

Leetcode 3035. Maximum Palindromes After Operations

Leetcode 3035. Maximum Palindromes After Operations 1. 解题思路2. 代码实现 题目链接&#xff1a;3035. Maximum Palindromes After Operations 1. 解题思路 这一题的话因为可以任意交换&#xff0c;因此事实上要考察回文的最大个数&#xff0c;我们只需要统计所有单词当…...

SCM供应链系统:一文读懂,需要优化升级的看过来。

单一的供应链系统平时很少碰到&#xff0c;但是很多B端系统中都会集成供应链的功能&#xff0c;贝格前端工场尝试对SCM做一下扫盲性的介绍&#xff0c;如有管理系统界面是优化和升级的需求&#xff0c;欢迎私信我们&#xff0c;共同探讨。 一、定义与由来 SCM有时也可以指供应…...

WSL外部SSH连接有效方法

前言 wsl作为windows下使用linux平台有效的手段之一&#xff0c;本文可以让win作为工作站&#xff0c;外部系统用来连接win下的wsl系统。 自动启动服务脚本 https://zhuanlan.zhihu.com/p/47733615 开机自启端口转发 wslname "Ubuntu-20.04" 要转发端口的Linux…...

MATLAB 1:基础知识

MATLAB中的数据类型主要包括数值类型、逻辑类型、字符串、函数句柄、结构体和单元数组类型。这六种基本的数据类型都是按照数组形式存储和操作的。 MATLAB中还有两种用于高级交叉编程的数据类型&#xff0c;分别是用户自定义的面向对象的用户类类型和Java类类型。 1.1.1数值类…...

django安装使用

Django 是一个高级的 Python Web 框架&#xff0c;用于构建安全和可维护的网站。以下是如何安装和使用 Django 的步骤。 一&#xff1a;安装 确保你安装了 Python 在 Django 3.x 中&#xff0c;官方支持 Python 3.6, 3.7, 3.8, 3.9, 和 3.10。你可以使用 python --version 或…...

基于LightGBM的回归任务案例

在本文中&#xff0c;我们将学习先进的机器学习模型之一&#xff1a;Lightgbm。在对XGB模型进行了越来越多的改进以获得更好的性能之后&#xff0c;XGBoost是一种极限梯度提升机器&#xff0c;但通过lightgbm&#xff0c;我们可以在没有太多计算的情况下实现类似或更好的结果&a…...

CTFshow web(php文件上传155-158)

web155 老样子&#xff0c;还是那个后端检测。 知识点&#xff1a; auto_append_file 是 PHP 配置选项之一&#xff0c;在 PHP 脚本执行结束后自动追加执行指定的文件。 当 auto_append_file 配置被设置为一个文件路径时&#xff0c;PHP 将在执行完脚本文件的所有代码后&…...

Leetcode 53 最大子数组和

题意理解&#xff1a; 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组 是数组中的一个连续部分。 所以每个元素都有两个状态&#xff0c;是前一部分的延续&#xff0…...

【pandas 不同文件读取和存储】

文章目录 一、Pandas 文件读取和存储概览二、读取不同类型的文件1. CSV文件的读取与存储代码及解释&#xff1a; 2. Excel文件的读取与存储代码及解释&#xff1a; 3. JSON文件的读取与存储代码及解释&#xff1a; 4. SQL数据库的读取与存储代码及解释&#xff1a; 5. 其他格式…...

python从入门到精通(十六):python爬虫的BeautifulSoup4

python爬虫的BeautifulSoup4 BeautifulSoup4导入模块解析文件创建对象python解析器beautifulsoup对象的种类Tag获取整个标签获取标签里的属性和属性值Navigablestring 获取标签里的内容BeautifulSoup获取整个文档Comment输出的内容不包含注释符号BeautifulSoup文档遍历Beautifu…...

Codeforces Round 924(Div.2) A~E

A.Rectangle Cutting (模拟) 题意&#xff1a; 给出一个长方形&#xff0c;通过平行于原始矩形的一条边进行切割&#xff0c;将该矩形切割成两个边长为整数的矩形。询问是否能通过旋转和移动这两个矩形&#xff0c;得到新的矩形。 分析&#xff1a; 可以发现拼成的新长方形…...

django中实现观察者模式

在Django中实现观察者模式&#xff0c;你可以利用Django的信号&#xff08;Signals&#xff09;系统。Django的信号提供了一种发布/订阅模型&#xff0c;允许解耦应用程序组件之间的交互。一个组件可以发送一个信号&#xff0c;而其他组件可以监听这个信号并响应它。 下面是如…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...

【C++】纯虚函数类外可以写实现吗?

1. 答案 先说答案&#xff0c;可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...