C/C++—— 对多态现象的理解

C/C++重要知识点汇总 C/C++重要知识点汇总(持续更新中) 阅读详情

多态问题汇总:
C/C++—— C++编译器是如何实现多态
C/C++—— 在构造函数中调用虚函数能实现多态吗(Vptr指针初始化的过程分析)
C/C++—— C++中构造函数不能是虚函数的原因分析
C/C++—— C++中定义虚析构函数的原因

C++的三大特性:封装,继承和多态。

多态特性分析主要有几个方面:多态的表现形式,多态实现的条件,多态如何实现,多态的理论基础。

多态的实现效果

同样的调用语句有多种不同的表现形态;

见下面例子,在下面例子中函数void printObj(Parent * pbase);函数可以通过一个基类指针调用子类的函数。

#include <iostream>
using namespace std;

class Parent{
    public:
        Parent(int a = 0){
            this->a = a;
        }
        virtual void print()
        {
            cout << "Parent, a = " << a << endl;
        }
    private:
        int a;
};

class Child:public Parent{
    public:
        Child(int b = 0){
            this->b = b;
        }
        //void print()
        virtual void print()//这里的virtual关键字可以要也可以不要,一般为了表明该函数虚函数则加上该关键字virtual
        {
            cout << "Child, b = " << b << endl;
        }

    private:
        int b;
};

void printObj(Parent * pbase)
{
    pbase->print();
}

int main()
{
    Parent p(10);
    Child c(11);

    printObj(&p);
    printObj(&c);

    return 0;
}

输出为:
Parent, a = 10
Child, b = 11

从输出结果可以看出printObj(&c);传入的是子类对象,但是函数的形参是父类的指针。但是确实是调用的是子类对象的print函数。这种现象就是多态。

多态实现的三个条件

有继承、有virtual重写、有父类指针(引用)指向子类对象。
这三个条件,我们可以在上面的例子中可以看到。

如果实现多态

virtual关键字,告诉编译器这个函数要支持多态;不要根据指针类型判断如何调用;而是要根据指针所指向的实际对象类型来判断如何调用。

多态的理论基础

动态联编PK静态联编。根据实际的对象类型来判断重写函数的调用。

多态的重要意义

设计模式的基础。

实现多态的理论基础

函数指针做函数参数

C/C++—— C++编译器是如何实现多态 C/C++—— 对多态现象的理解C++中多态的实现原理 阅读详情

相关推荐

手把手教你搭建硬件在回路(HIL)仿真系统:从Simulink建模到实时测试

本文详细介绍了如何从零开始搭建硬件在回路(HIL)仿真系统,涵盖Simulink建模、实时仿真、代码生成及调试等关键步骤。通过具体配置示例和优化技巧,帮助开发者解决复杂控制系统验证中的技术难题,提升半实物仿真的效率和可靠性。

weixin_30952535的博客 445

C++多态的理解

1.多态的概念及分类 多态是面向对象程序设计的一个重要特征。多态的字面意思就是多种状态,在面向对象的程序设计中,一个接口,多种实现即为多态。c++的多态性具体体现在编译和运行两个阶段。编译时多态是静态多态,在编译时就可以确定使用的接口。运行时多态是动态多态,具体引用的接口在运行时才能确定。 静态多态和动态多态区别其实只是在什么时候将函数实现和函数调用关联起来,是在编译时期还是运行时期,即函数地址是早绑定还是晚绑定。静态多态是指在编译期间就可以确定函数的调用地址,并产生代码,这是静态的,也就是说地址是早绑

weixin_44244332的博客 6254

烽火HG680-LC刷机后体验:当贝纯净桌面+讯飞语音,老盒子秒变智能电视的折腾记录

本文详细记录了烽火HG680-LC机顶盒刷机后的使用体验,通过安装当贝纯净桌面和讯飞语音助手,老盒子焕发新生,实现无广告、快速响应的智能电视功能。文章对比了刷机前后的性能差异,分享了影音播放、语音控制等实用功能,并提供了ADB调试和问题解决的实用技巧,帮助用户将闲置的运营商盒子变身为高性能的智能影音中心。

weixin_30292843的博客 469

C++多态性的理解

多态的含义: 多态的作用: C++中多态的方法:

每天八杯水的博客 1638

避坑指南:CoppeliaSim逆运动学仿真常见报错解决方案(附UR5+RG2爪完整Lua脚本)

本文针对CoppeliaSim机器人仿真中常见的逆运动学报错问题,提供了详细的避坑指南和解决方案。文章以UR5机械臂与RG2夹爪组合为例,深入剖析了模型装配、Dummy节点配置、Lua脚本编写等关键步骤中的常见错误,并附带了完整的、带错误处理的脚本代码,帮助用户快速定位并解决IK仿真失败问题,提升仿真效率。

weixin_29054399的博客 267

Claude Code 实战指南:从入门到高效编程

本文是一份Claude Code实战指南,旨在帮助开发者从入门到精通这款AI编程助手。文章详细讲解了如何通过清晰的指令公式与Claude Code高效沟通,并展示了如何将其深度集成到日常开发工作流中,例如理解陌生代码、调试和生成测试文档。指南还提供了避坑建议与最佳实践,并通过构建一个天气查询CLI工具的完整案例,演示了如何利用Claude Code加速开发进程,实现从设计到代码的高效人机协作。

weixin_28339967的博客 483

C++多态全方面详解。

什么是多态 顾名思义多态就是多种形态的意思。 例如:去游乐场玩,儿童买票是半价,成年人买票是全价,老年人买票打七折。 对比类的话,这个买票就是一个类的一个方法(函数)。儿童,成年人,老年人即是对象,这些对象调用同一个买票函数得出来的不同的票价,这就是多态。 我们教材里面描述的多态性的描述是:不同对象收到相同的的消息时(即调用相同的函数),产生不同的动作。直观的说,多态性是指用一个名字定义不同的函数(这里只要函数名相同就行),这些函数执行不同但又类似的操作,从而可以使用...

m0_57706881的博客 1万+

PyTorch生成式人工智能——VQ-VAE详解与实现

VQ-VAE (Vector Quantised-Variational AutoEncoder) 的核心思想就是将 VAE 的连续潜变量离散化。它通过学习一个码本 (Codebook) 来实现这一点,码本是一个包含有限个嵌入向量的字典。模型不是直接输出一个连续的潜在向量,而是从码本中找出与编码器输出最接近的嵌入向量来代替它。本节首先详细讲解 VQ-VAE 的技术原理,然后使用 PyTorch 从零开始实现 VQ-VAE 模型。

盼小辉丶的博客 3264

C++多态详解

C++多态详解

qq_52905520的博客 2906

基于锁相环的高精度频率分频器simulink建模与仿真

在现代电子系统中,高精度频率分频器扮演着至关重要的角色。它能够提供精确的频率参考,广泛应用于通信、仪器仪表、航空航天等领域。基于锁相环的高精度频率分频器具有结构简单、性能稳定等优点,成为了研究的热点。

平时工作较为繁忙,私信消息一般晚上回复,谢谢大家~~ 776

Claude Code 官方文档+3 个高活跃社区+5 个可复用开源项目:14.4 节持续学习资源实测清单

揭示 Claude Code 的核心交互范式是「状态机驱动的对话式编程」,强调官方文档实为配置契约、社区是直觉验证场、开源项目是配置能力校准器;通过真实故障案例解析上下文丢失根源,提出以工程化方式管理 claude.config.json、CLAUDE.md 和技能配置。

weixin_28728443的博客 326

C++易错知识点(七)一步一步理解虚函数与多态的概念和本质

先编写一个代码说明一下多态现象: #include<iostream> using namespace std; class CPerson { public: int mid; virtual void speak() { cout << "说人话" << endl; } CPerson(){ mid = 0; cout << "父类构造" << endl; }; }; class CChinese:public CPe

weixin_42445051的博客 419

Archery通过OpenResty代理转发后登录一直提示Forbidden

测试几遍,连账号密码都没用验证,因为不管输什么都是提示Forbidden。找到配置文件settings.py,下面命令可到配置文件路径。回到页面刷新,随便输入个账号密码,验证失败证明请求成功了。查看Preview,提示CSRF验证失败,请求被中断。域名:dba.hkeasyspeed.com。打开开发者工具查看,网络里面可以看到报403。添加一条配置,把你配置域名添加进去。可以看到页面可以正常访问到。进入Archery容器。重启Archery容器。正常输入账号密码,OK。

万物皆可学 3143

【C/C++】C++基础知识查漏补缺

1、C++多态性的概念(转自 C语言中文网) 多态性是面向对象程序设计的一个重要特征。如果一种语言只支持类而不支持多态,是不能被称为面向对象语言的,只能说是基于对象的,利用多态性可以设计和实现一个易于扩展的系统。 在C++程序设计中,多态性是指具有不同功能的函数可以用同一个函数名,这样就可以用一个函数名调用不同内容的函数。也就是说,每个对象可以用自己的方式去响应这个函数调用行为。

mick_seu的博客 650

VC中sqlite的使用

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

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

C++中虚函数和多态的理解和测试程序

/***********************************************************************C++ 的类机制中有支持多态的技术来解决抽象编程,它用的是一种滞后捆绑(late binding)技术。这种技术,通过预先设定其成员函数的虚函数性质,使得任何捆绑该成员函数的未定类型的对象操作在编译时,都以一个不确定的指针特殊地“引命待发”来编

Yasin Lee 973

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

C++对象模型笔记-对象

概述 我先胡扯一下要讲述的内容,C++对象模型。C++对象模型到底讲述了哪些东西或者说什么是C++对象模型。 C++对象模型包含两部分内容:语言中直接支持面向对象程序设计的部分以及对各种底层实现机制的支持。 这两者相辅相成,C++作为一个面向对象的语言自然需要支持面向对象的相关设计(虽说C++模型和面向对象的思想是一起发展起来的,作为一个新学者就暂且认为先有OO思想吧),当然也逃离不了对面向对象相关机制的实现。 就像达到一个目的地并非只有一种手段,因此也有很多种方法来是实现面向对象的机制。经过多年的发展大

Wcoming的博客 518

Devexpress16.2.6破解工具

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

C++面向对象

从博客获得灵感,做一下自己理解的笔记,便于以后自己复习。(4条消息) 《C++面向对象程序设计》✍千处细节、万字总结(建议收藏)_白鳯的博客-优快云博客_c++面向对象程序设计 一、面向过程和面向对象 (1)面向过程:程序设计的规范是比较广泛的面向过程性语言,主要的特征是:它将程序分成过程定义和过程调用。(面向过程就是值程序执行某项命令的一段代码,比如说函数的调用就是比较常见的过程。) (2)面向对象:程序的结构特点是①程序是由类的定义和类的使用组成。②程序中一切操作是通过向对象发送消息来实现的。

m0_62624752的博客 600

【C++】多态

本篇是自己阅读加上自己对“多态”的理解,若有不足之处,感谢指出~ 多态 多态最常见的用法就是声明基类类型的指针,利用该指针指向任意一个子类对象,调用相应的虚函数,可以根据指向的子类的不同而实现不同的方法。如果没有使用虚函数的话,即没有利用C++多态性,则利用基类指针调用相应的函数的时候,将总被限制在基类函数本身,而无法调用到子类中被重写过的函数。因为没有多态性,函数调用的地址将是固定的,因此将始终调用到同一个函数,这就无法实现“一个接口,多种方法”的目的了。 在C++ Primer有关于OOP编程的描述.

此地无银 400

怎样理解多态

多态的表现(效果):同一个调用语句可以实现多种形态.比如,在发生多态时,如果传入参数是一个子对象,那么会调用子对象对应的成员方法,如果传入参数是一个父对象,那么会调用父对象的成员方法.C++中多态的实现:C++中多态的实现需要三个条件.1.存在继承关系 2.子类重写父类虚函数 3.父类指针或引用指向子类对象.多态的意义:增加了程序的可拓展性,实现了模块之间的解耦和.C++面向对象三

wangqinyangx的博客 2000

C++ 继承、多态与类型转换 | 函数重载 / 隐藏 / 覆盖实现与基派生类指针转换

……

u013669912的博客 1051

【C++】面向对象(多态)

C++面向对象编程 多态一、什么是多态?1.多态的概念 一、什么是多态? 1.多态的概念 (1)根据实际的对象类型决定函数调用的具体目标; (2)同样的调用语句在实际运行时有多种不同的表现形态体现,这就是多态,同一语句具有多种形态 ...

qq_51307413的博客 880

c++多态性

本文笔记来自网易云课堂 http://study.163.com/course/courseMain.htm?courseId=271005多态性的概念多态性(polymorphism)是面向对象程序设计的一个重要特征。如果一种语言只支持类而不支持多态,是不能被称为面向对象语言的,只能说是基于对象的,如Ada、VB就属此类。C++支持多态性,在C++程序设计中能够实现多态性。利用多态性可以设计和实

shidongxing的专栏 633

10C++类和对象

类和对象 8.1 面向对象程序设计方法概述 到目前为止,我们介绍的是C++在面向过程的程序设计中的应用。对于规模比较小的程序,编程者可以直接编写出一个面向过程的程序,详细地描述每一瞬时的数据结构及对其的操作过程。但是当程序规模较大时,就显得力不从心了。C++就是为了解决编写大程序过程中的困难而产生的。 8.1.1 什么是面向对象的程序设计 面向对象的程序设计的思路和人们日常生活中处理问...

weixin_30887919的博客 240

C++学习14:代码底层——对象模型、动态绑定

1 类与类三种关系下的构造与析构 构造由内而外,析构由外而内。这部分内容算是复习一下:OOP——类和类之间的关系(复合、委托、继承)

时间有泪 756
上一篇: Linux技术——gdb调试基础
下一篇: C/C++—— C++编译器是如何实现多态
readyao
博客等级 码龄11年 243粉丝 163原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值