热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

C++多态原理纸上谈兵

继承召唤多态。多态就是多种形态。因继承而生创建出的对象理所当然地拥有其基类的所有成员,所以从本质上来说,它既可以被称为是子类的对象,又可以

继承召唤多态。多态就是多种形态。因继承而生创建出的对象理所当然地拥有其基类的所有成员,所以从本质上来说,它既可以被称为是子类的对象,又可以被称为是父类的对象。如果子类和父类中定义了完全相同的两个成员函数,又对新创建的子类对象调用这个成员函数,那么就会分不清是调用基类的还是子类的。解决办法是虚函数机制。

将基类函数标记为virtual虚函数,编译时则暂时将绑定对象这一步滞后(没运行前不知道是子类还是基类),而是做一个向即将绑定的该实际对象的成员函数的间接访问。那么在运行时,就能根据情况选择子类函数还是基类函数。虚函数是自动继承的,但要分清虚函数和重载的关系。虚函数之间必须完全相同,重载是参数不同。重载是确定的,编译器在编译的时候就能根据参数的情况准确判断该函数属于基类还是子类,但虚函数无法被判断,必须滞后到运行时处理。对于虚函数,有个返回类型的例外,就是当虚函数仅有返回类型不同,且返回类型之间是基类和子类的关系,则仍能识别(理解起来,就是我传给你的基类你返回就是基类,传进去子类就返回子类)。静态成员函数、内联函数、构造函数不是虚函数。析构函数常声明为虚函数。虚函数和虚继承有区别。虚继承是解决多继承中成员变量或成员函数命名冲突问题的,用虚继承的派生类,在构造的时候就只会保留继承的一份类成员。虚继承跟基类基本没影响,是子类构建的时候才会生效。

多态性还体现在类型转换。定义的沙发床类有的时候我想让它表现出家具的特性,有的时候想表现出沙发床的特性,这就要多态地识别类型。动态转型dynamic_cast专门针对有虚函数的继承结构,静态转型static_cast就可以更广。


推荐阅读
  • 页面预渲染适用于主要包含静态内容的页面。对于依赖大量API调用的动态页面,建议采用SSR(服务器端渲染),如Nuxt等框架。更多优化策略可参见:https://github.com/HaoChuan9421/vue-cli3-optimization ... [详细]
  • 本文总结了 #define 在 C/C++ 编程中的多种用途和技巧,包括定义常量、函数、宏以及条件编译等,并提供了详细的示例和注意事项。 ... [详细]
  • 本文旨在探讨Swift中的Closure与Objective-C中的Block之间的区别与联系,通过定义、使用方式以及外部变量捕获等方面的比较,帮助开发者更好地理解这两种机制的特点及应用场景。 ... [详细]
  • Gradle 是 Android Studio 中默认的构建工具,了解其基本配置对于开发效率的提升至关重要。本文将详细介绍如何在 Gradle 中定义和使用共享变量,以确保项目的一致性和可维护性。 ... [详细]
  • 本报告记录了嵌入式软件设计课程中的第二次实验,主要探讨了使用KEIL V5开发环境和ST固件库进行GPIO控制及按键响应编程的方法。通过实际操作,加深了对嵌入式系统硬件接口编程的理解。 ... [详细]
  • 想把一组chara[4096]的数组拷贝到shortb[6][256]中,尝试过用循环移位的方式,还用中间变量shortc[2048]的方式。得出的结论:1.移位方式效率最低2. ... [详细]
  • 本文详细介绍了如何在最新版本的Xcode中重命名iOS项目,包括项目名称、应用名称及相关的文件夹和配置文件。通过本文,开发者可以轻松完成项目的重命名工作。 ... [详细]
  • 本文提供了一种有效的方法来解决当Android Studio因电脑意外重启而导致的所有import语句出现错误的问题。通过清除缓存和重建项目结构,可以快速恢复开发环境。 ... [详细]
  • iOS如何实现手势
    这篇文章主要为大家展示了“iOS如何实现手势”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“iOS ... [详细]
  • Hadoop MapReduce 实战案例:手机流量使用统计分析
    本文通过一个具体的Hadoop MapReduce案例,详细介绍了如何利用MapReduce框架来统计和分析手机用户的流量使用情况,包括上行和下行流量的计算以及总流量的汇总。 ... [详细]
  • 本文详细介绍了在Luat OS中如何实现C与Lua的混合编程,包括在C环境中运行Lua脚本、封装可被Lua调用的C语言库,以及C与Lua之间的数据交互方法。 ... [详细]
  • 本文深入探讨了动态赋值的概念及其在编程实践中的应用,特别是通过Java代码示例来展示如何利用循环结构动态地为数组分配值。 ... [详细]
  • 深入解析C语言中的关键字及其分类
    本文将全面介绍C语言中的关键字,并按照功能将其分为数据类型关键字、控制结构关键字、存储类别关键字和其他关键字四大类,旨在帮助读者更好地理解和运用这些基本元素。C语言中共有32个关键字。 ... [详细]
  • 本文深入探讨了WPF框架下的数据验证机制,包括内置验证规则的使用、自定义验证规则的实现方法、错误信息的有效展示策略以及验证时机的选择,旨在帮助开发者构建更加健壮和用户友好的应用程序。 ... [详细]
  • 本文详细探讨了在Java编程语言中,构造函数、静态代码块和构造代码块的执行顺序。首先明确了静态代码块、构造代码块以及构造函数方法体的执行优先级,随后深入分析了构造函数体执行前的具体步骤,包括父类构造器的调用、非静态变量的初始化等。 ... [详细]
author-avatar
mobiledu2502929697
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有