多态相关知识

多态相关知识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).建立公共接口目的是为了将子类公共的操作抽象出来,可以通过一个公共接口来操纵一组类,且这个公共接口不需要事先(或者不需要完全实现)。可以创 阅读详情

相关推荐

STM32使用 jansson 处理 Json格式字符

STM32 Json 字符的创建和解析1、Json简介2、jansson库的下载安装和报错解决2.1、下载安装2.2、STM32工程文件中导入jansson库2.3、报错解决2.4、修改堆栈空间3、Json 字符的创建4、Json 字符的解析4.1 纯键值对4.2、键的值是一个对象4.3、键的值是一个数组   STM32处理json字符串一般不常见,大部分都是不需要处理的数据,但是在一些通信中需要处理上传或者下传的数据,就别比如在物联网中,有一部分数据就是以json格式传输的,那么就需要对数据经行解析。我简

青烨慕容 7417

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

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

fulufulucode的博客 977

VBA学习笔记6:将多个工作表中满足条件的数据汇总到同一个工作表

VBA学习笔记6:将多个工作表中满足条件的数据汇总到同一个工作表

weixin_45355881的博客 4708

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

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

就业知识博客 912

RK3576+IMX415 MIPI摄像头零拷贝显示系统

MIPI CSI-2是嵌入式视觉系统中主流的高速图像传感器接口标准,其核心价值在于低延迟、高带宽与硬件级DMA直通能力。基于V4L2子系统与DRM/KMS驱动栈,可构建从传感器RAW数据到帧缓冲区的零拷贝通路,显著降低CPU负载并提升实时性。该技术广泛应用于工业检测、边缘AI推理前数据接入及多路同步采集等场景。本文以Rockchip RK3576 SoC和索尼IMX415传感器为典型组合,详解MIPI物理层适配、内核驱动集成、GStreamer零拷贝管道搭建及systemd服务化部署,覆盖从硬件信号完整性到

weixin_36047538的博客 216

在 Linux/Debian/Ubuntu 上使用 Brasero 刻录光盘

在 Ubuntu 系统中,Brasero 是一个非常方便的光盘刻录工具。无论是创建数据光盘、音频光盘还是刻录光盘镜像文件,Brasero 都能轻松胜任。本文将介绍如何在 Ubuntu 上安装和使用 Brasero 进行光盘刻录。

I AM COMING BACK... 3543

多态的相关知识

多态/虚函数

2301_80001343的博客 755

一种基于机载LiDAR点云电力线自动提取方法

文章目录一、引言二、算法实现2.1实现步骤2.2实现代码 一、引言 二、算法实现 2.1实现步骤 (1)首先采用首先采用高程滤波方法去除地面点和低矮地物点,滤波后的点云数据中除电力线点云外还含部分杆塔点、高植被点和噪声点。 (2)根据点云空间维度特征提取电力线点,使用空间密度聚类的方法实现单根电力线精确分离。 2.2实现代码 在这里插入代码片 ...

dayuhaitang1的博客 5170

C++多态相关知识总结

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

loreal8的博客 220

LPDDR5 学习笔记07:读写操作详解

本文介绍了LPDDR5 SDRAM的读写操作时序规范。对于读操作,需在时钟上升沿发送读指令,经过RL延迟后输出首个有效数据,并需定期校准采样时钟以补偿时序偏移。写操作需先建立WCK2CK同步状态,WCK信号需提前驱动,并在写入数据后保持活动状态。连续读写操作中,若指令间隔超过特定阈值需重新同步。还介绍了RDQS模式,通过数据选通信号提高高速场景下的数据采集可靠性。所有操作都需满足严格的时序参数要求,包括前后导码、后缀周期等,以确保数据可靠传输。

一只豌豆象的博客 2724

2026年Java 开发工程师常见面试简答题

本文整理了Java开发工程师面试常见简答题及详细解析,涵盖Java基础、集合框架、并发编程、JVM等核心考点。主要内容包括:1. Java基础概念:JDK/JRE/JVM区别、面向对象特性、重载与重写、接口与抽象类、String特性等 2. 集合框架:ArrayList/LinkedList区别、HashMap实现原理、线程安全方案、集合类型对比 3. 并发编程:synchronized原理、volatile作用、线程创建方式、线程池参数与策略、死锁处理 4. JVM相关:内存区域划分、垃圾回收算法、类加载

不务正业的猿 369

多态方面相关的知识

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

weixin_51062428的博客 276

SRS流媒体服务器在Windows下的安装

在之前的流媒体开发中(视频会议),我基本上使用nginx加模块的方式进行学习、测试,正式开发的时候改为服务器端用EasyDarwin,客户端用rtsp-simple-server(这些流媒体服务器的用法见我以前的博文),这样可以充分利用客户端的资源,降低服务器端的压力。在流媒体协议方案,我选择相对较快的rtsp。这个协议优点是支持UDP协议,优化好的环境下可以实现3秒以下的延迟,基本满足甲方要求,缺点就是不支持网页播放。

dgnankai的专栏 2023

多态相关知识点

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

长安1108的博客 137

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

java多态相关知识点

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

qwe7150849的博客 275

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

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

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

Ye_mulin的博客 530

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

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、付费专栏及课程。

余额充值