多态相关知识

多态相关知识1 如果函数的调用,在编译阶段就可以确定函数的调用地址,并产生代码,就是静态多态(编译时多态),就是说地址是早绑定的。C++动态多态性是通过虚函数来实现的,虚函数允许子类(派生类)重新定义父类(基类)成员函数,而子类(派生类)重新定义父类(基类)虚函数的做法称为覆盖(override),或者称为重写。取一个对象的地址(指针或引用),并将其作为基类的地址来处理,这种称为向上类型转换。c++支持编译时多态(静态多态)和运行时多态(动态多态),运算符重载和函数重载就是编译时多态,而派生类和虚函数实现运行时多态。 阅读详情

在 C++ 中,“多态(Polymorphism)”是一种面向对象编程的核心特性,它允许相同的接口在不同的对象上表现出不同的行为。

✅ 多态的定义

多态(Polymorphism) 是指在不同类的对象上对同一个函数调用,表现出不同的行为(即不同的实现)。

简单来说:

同一个函数调用,可以执行不同的函数体。

🔢 C++ 多态的分类

C++ 中的多态有两种:

类型 说明 示例特征
编译时多态 在编译阶段就能确定调用哪个函数 函数重载、运算符重载
运行时多态 在运行时根据对象的实际类型决定调用哪个函数 虚函数、继承、多态指针/引用
📌 编译时多态(静态多态)

编译器在编译期间确定要调用的函数。

例子:函数重载
#include
void print(int x) {
std::cout << "int: " << x << std::endl;
}
void print(double x) {
std::cout << "double: " << x << std::endl;
}
int main() {
print(10); // 调用 int 版本
print(3.14); // 调用 double 版本
}

📌 运行时多态(动态多态)

通过继承 + 虚函数实现,在运行时根据实际对象类型调用对应的方法。

条件:

使用 继承(基类和派生类)

基类中的函数被标记为 virtual

使用 基类指针或引用 指向 派生类对象

例子:
#include
using namespace std;

class Animal {
public:
virtual void speak() { // 虚函数
cout << “Animal speaks” << endl;
}
};

class Dog : public Animal {
public:
void speak() override {
cout << “Dog barks” << endl;
}
};

int main() {
Animal* a = new Dog(); // 用基类指针指向派生类对象
a->speak(); // 调用 Dog 的 speak,而不是 Animal 的
delete a;
}

输出:

Dog barks

✅ 多态的好处

可扩展性强:添加新的类,只需重写方法即可。

解耦:使用基类指针或引用编程,而不关心具体对象类型。

提高代码复用性和灵活性

如果你想进一步了解虚函数表(vtable)、纯虚函数、抽象类等,我也可以继续帮你深入解析。是否需要?

多态相关知识2 在设计时,常常希望基类仅仅作为其派生类的一个接口。这就是说,仅想对基类进行向上类型转换,使用它的接口,而不希望用户实际的创建一个基类的对象。同时创建一个纯虚函数允许接口中放置成员原函数,而不一定要提供一段可能对这个函数毫无意义的代码。做到这点,可以在基类中加入至少一个纯虚函数(pure virtual function),使得基类称为抽象类(abstract class).建立公共接口目的是为了将子类公共的操作抽象出来,可以通过一个公共接口来操纵一组类,且这个公共接口不需要事先(或者不需要完全实现)。可以创 阅读详情

相关推荐

LEfSe分析避坑指南:如何解决R语言中的常见错误与优化结果可视化

本文提供了R语言中进行LEfSe(线性判别分析)微生物组差异分析的全流程避坑指南。详细解析了从数据格式准备、参数调优(如显著性水平与LDA阈值)、结果可靠性验证到使用ggplot2进行高级可视化的实战技巧,帮助用户规避常见错误,获得更稳健、美观的分析结果。

weixin_29098391的博客 361

【C++】多态相关知识详细梳理

1.多态是由虚表来实现的。2.虚函数重写是通过覆盖父类拷贝过来的虚表中的对应函数地址来实现的。并且在调用过程中是使用父类的接口和子类的方法。3.父类和子类的虚表并不是同一个。派生类中也可以有多个虚表地址,例如多继承。4.虚表地址存在对象的头四个字节处(32位)。5.重载,重写以及重定义容易混淆,需要理清。6.多态是在运行时确定的,属于动态绑定。7.可以定义纯虚函数实现抽象类强制派生类重写。(不重写就不要定义虚函数)

fulufulucode的博客 977

基于单片机智能家居控制系统设计

*单片机设计介绍,基于单片机智能家居控制系统设计。

QQ2193276455的博客 1715

【C++】多态介绍 and 大厂常考多态的相关知识

本文介绍多态的相关知识,在此的基础上讲解大厂常考多态的内容。

就业知识博客 912

Ubuntu开机卡在BusyBox?3种方法快速修复initramfs错误(附详细命令)

本文详细介绍了Ubuntu开机卡在BusyBox并出现initramfs错误的3种修复方法,包括使用fsck检查文件系统、调整BIOS/UEFI存储设置以及修改GRUB内核参数。针对常见的文件系统错误和根设备无法找到问题,提供了具体的命令行操作步骤和实用技巧,帮助用户快速恢复系统启动。

milk8的博客 784

altium room 布局_ALtium 16相同重复模块PCB布局,复制布局走线

自己做了实际工程以后发现PCB器件名字后缀太长了,所以文章最后写了一下后缀的调整方法。第一种方法:1、建立子原理图如下,文件名CANM 2、之后新建一个顶层文件,文件名TOP,之后design—create sheet symbol form sheet or hdl。选择CANM,并放置到TOP中,如下 3、由于我们要多次调用CANM所以使用repeat命令修改如下: 4、之后根据自己的定义,连...

weixin_39609573的博客 5749

多态的相关知识

多态/虚函数

2301_80001343的博客 755

从地方政府网站抓取政务公开数据:Python爬虫技术详解

在本文中,我们通过具体实例介绍了如何使用Python编写爬虫,从地方政府门户网站抓取政务公开数据。我们使用了requestsSelenium等最新技术,结合SQLite数据库存储抓取的数据,最后使用matplotlib进行数据可视化分析。通过本项目,您可以掌握如何抓取政府网站的公开数据,并将其进行清洗、存储和分析。这些技术对于进行政府政策分析、公共服务分析等方面具有重要的实际意义。希望通过本文的介绍,您能够更好地理解政务数据抓取的流程和方法,并能在实际工作中运用这些技术进行数据采集和分析。

2201_76125261的博客 1701

C++多态相关知识总结

多态 多态是指在不同继承关系的类对象,去调用同一函数,产生了不同的行为。 构成多态的条件: 1.必须通过基类的指针或者引用调用虚函数 2.被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写 virtual关键字修饰的类成员函数称为虚函数。 虚函数的重写: 派生类中有个函数和基类中的一个函数满足以下条件可以重写函数: 1.函数名相同 2.返回值类型相同 3.参数列表相同 注意:如果基类成员函数前有virtual关键字,而子类成员函数前没有也构成重写。 调用虚函数的类型必须为指针或者引用。如下这样:

loreal8的博客 220

大数据工程中的数据血缘分析工具比较

数据血缘(Data Lineage)是大数据治理中的核心组成部分,它描述了数据从源头到目标的完整流动路径。系统介绍数据血缘的核心概念和技术原理比较主流开源和商业数据血缘工具的功能特点提供数据血缘分析的实践指南和选型建议本文首先介绍数据血缘的基本概念,然后深入分析其技术原理和实现方法,接着比较主流工具的特点,最后通过实际案例展示应用场景。数据血缘(Data Lineage): 描述数据从源头到目标的完整流动路径,包括所有转换和处理步骤元数据(Metadata)

大数据洞察的博客 900

要理解成本中心与利润中心的根本区别与适用场景,需从 “责任范围、考核核心、管理目标” 三个核心维度切入,同时明确二者在企业管理体系中的联动关系

摘要: 成本中心与利润核心区别在于责任范围、考核目标和管理权限。成本中心仅对成本负责(如生产、行政部门),考核成本控制能力;利润中心需同时管控成本与收入(如独立产品线、区域分公司),以利润为核心指标。选择标准取决于单元是否拥有收入决策权:无收入权的支持/执行部门设为成本中心,能独立经营、核算盈亏的单元设为利润中心。二者协同运作,成本中心为利润中心提供基础支持,利润中心的需求动态影响成本中心资源配置,共同实现企业整体目标。划分本质是确保考核指标与责任范围匹配,避免管理失效。

金牌架构师 656

多态方面相关的知识

封装 封装是管理复杂程度的核心手段 调用者不需要考虑实现细节;实现者需要实现细节; 封装的意义是:降低了使用者的使用成本 多态

weixin_51062428的博客 276

【Python基础】FastAPI 从入门到项目实战操作详解

【Python基础】FastAPI从入门到使用实战操作详解

congge_study的博客 437

多态相关知识点

ps:方法重写小技巧,直接打字打出父类的方法名,回车就可以(如下图)三、多态中成员(包括成员变量和成员方法)的访问特点。有继承 有方法重写 有父类引用指向子类对象。

长安1108的博客 137

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

java多态相关知识点

定义 多态: 是指同一行为,具有多个不同表现形式。 实现多态的前提 继承extends或者实现implements【二选一】 方法的重写【意义体现:不重写,无意义】 父类引用指向子类对象【格式体现】 多态的格式 父类类型 变量名 = new 子类对象; 变量名.方法名(); //父类类型:指子类对象继承的父类类型,或者实现的父接口类型 Fu f = new Zi(); f.method(); 当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,执行的是子类重写 后方法

qwe7150849的博客 275

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

JAVA多态性相关知识,看这篇就足够了

希望通过《学JAVA,看这篇就足够了》系列,让读者们深刻理解JAVA相关知识。从小白到大牛,需要一步一步 面向对象特征之三:多态性 1.理解多态性:可以理解为一个事物的多种形态。 2.何为多态性: 对象的多态性:父类的引用指向子类的对象(或子类的对象赋给父类的引用) 3. 多态的使用:虚拟方法调用 有了对象的多态性以后,我们在编译期,只能调用父类中声明的方法,但在运行期,我们实际执行的是子类重写父类的方法。 总结:编译,看左边;运行,看右边。 4.多态性的使用前提: ① 类的继承关系 ② 方法的重...

Ye_mulin的博客 530

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

python 多态应用_python 多态这一部分的知识点相关应用

类型这块type 一个对象的时候,这个对象的类型,总是这个对象所属的类type任何一个类,它的类型都是type,type是所有数据类型和类的鼻祖type的类型是它本身 type = type(type)函数的类型就是函数python是一种动态语言,一个鸭子类型举例:动态python变量,在赋值的时候,赋值号(=)右边的数据类(list,set,float等)对象是什么类型,他就是什么类型a. 常...

weixin_39856055的博客 127

C++多态相关知识

       1:每一个类都有虚表   2:虚表可以继承,如果子类没有重写虚函数,那么子类虚表中仍然会有该函数的地址,只不过这个地址指向的是基类的虚函数实现,如果基类有3个虚函数,那么基类的虚表中就有三项(虚函数地址),派生类也会虚表,至少有三项,如果重写了相应的虚函数,那么虚表中的地址就会改变,指向自身的虚函数实现,如果派生类有自己的虚函数,那么虚表中就会添加该项。   3:派生类的虚表中虚...

sinat_42721727的博客 271

继承 多态的相关知识

一 继承 在php中,使用extends实现继承。 作用:如果我们不使用继承,就要写很多重复的代码。 二 继承的构造方法 1 子类继承父类时,子类没有构造方法,实例化子类对象时,会执行父类的构造方法。子类如果有自己的构造方法,实例化子类对象时,只会自动执行子类自己的构造方法。 2 子类的构造方法有两个参数,所以当我们实例化子类对象时,必须传递两个参数。 三 继承中的保护 protected:受保护...

weixin_45595218的博客 171

多态的相关知识学习

多态的相关学习

为以后打基础吧 143

JAVA中多态相关知识

例如:父类为Animal子类为Dog和Cat,Animal类中有吃东西的方法,Dog和Cat类实现的吃东西的方法就是不一样的,因为狗和猫喜欢吃的东西是不一样的。将一个子类对象经过向上转型之后当成父类方法使用,再无法调用子类的方法,但有时候可能需要调用子类特有的 方法,此时:将父类引用再还原为子类对象即可,即向下转换。是Java中的一个二元操作符,用于检测左侧的对象是否为右侧类或接口的实例。它返回一个布尔值,如果对象是指定类的实例或者是这个类的子类的实例,则返回。向上转型的缺陷:不能调用到子类特有的方法。

2502_91833766的博客 337

多态的一些相关知识

多态

weixin_64651338的博客 98

java中多态的的知识点_Java中多态相关知识点

多态1.多态概述同一个对象在不同时刻表现出的不同形态多态的前提和体现:有继承/实现关系有方法重写有父类引用指向子类对象(Animal a = new Cat();)2.多态中的成员访问特点成员变量:编译看左边,执行看右边成员方法:编译看左边,执行也看左边为什么成员变量和成员方法的访问不一样呢?因为成员方法有重写,而成员变量没有.示例:父类package com.itheima_06;public ...

weixin_32002013的博客 208
上一篇: 如何实现一个自定义的STL容器类,需要注意哪些方面
下一篇: 解释一下C++中内存屏障和它的作用——多线程编程
C++_girl
博客等级 码龄7年 32粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值