首页 > 其他分享 >多态的类型有哪些?

多态的类型有哪些?

时间:2024-06-10 22:21:33浏览次数:29  
标签:编译 函数 哪些 绑定 多态 重载 类型

1.多态的类型

   多态性有四种类型:重载多态、强制多态、参数多态和包含多态。

   前两种可以统称为专用多态。之前讲过普通函数的重载和类的成员函数的重载,它们都属于重载多态。上面说的整型变量和浮点型变量相加时,需要先把整型变量强制转换为浮点型再进行加法运算,这就是强制多态。从概念上讲,强制多态就是将一个变量的类型进行转换,以满足一个函数运算的要求。

   后两种统称为通用多态。前面讲过的类模板将类型参数化,设定了确定的类型才可以实例化。由类模板实例化得到的所有类都有相同的操作,但是被操作对象的类型不同,这就是参数多态。包含多态是指类族中不同类的同名成员函数实现的操作不相同。包含多态一般通过虚函数来实现。虚函数在我们进行软件开发设计时会经常用到,初学者在有了一定经验后会越来越多的使用虚函数。

   后面会主要讲重载多态的运算符重载和包含多态的虚函数。

   2.多态的实现

   从多态实现的阶段不同来分类可以分为编译时的多态和运行时的多态。

   编译时的多态是指在编译的过程中就确定了具体调用同名函数中的哪个函数,而运行时的多态则是在程序运行过程中才动态的确定调用的具体函数。这种确定调用同名函数的哪个函数的过程就叫做联编或者绑定。一般称其为绑定。绑定实际上就是确定某个标识符对应的存储地址的过程。按照绑定发生的阶段的不同可以分为:静态绑定和动态绑定。静态绑定就对应着编译时的多态,动态绑定对应运行时的多态。

   如果绑定过程发生在编译链接阶段,则称为静态绑定。在编译链接过程中,编译器根据类型匹配等特征确定某个同名标识究竟调用哪一段程序代码,也就是确定通过某个同名函数到底调用哪个函数体。1中的四种多态中有三种需要静态绑定:重载多态、强制多态和参数多态。

   而如果绑定过程发生在程序运行阶段,则成为动态绑定。在编译链接过程中无法确定调用的具体函数,就要等到程序运行时动态确定。包含多态就需要使用动态绑定实现。

标签:编译,函数,哪些,绑定,多态,重载,类型
From: https://www.cnblogs.com/chhblogs/p/18241143

相关文章

  • 聚合支付都有哪些优势?
     聚合支付的优势:1.整合性:通过一个统一的账户和平台,商户可以接受微信支付、支付宝、云闪付等多种支付方式,无需分别申请和管理多个支付接口。 2.效率提升:商户无需再分别对接不同的支付公司,大大缩短了申请和接入的时间成本。 3.管理便利:实现了统一收付、统一数据管理......
  • Vue TypeScript 实战:掌握静态类型编程
    title:VueTypeScript实战:掌握静态类型编程date:2024/6/10updated:2024/6/10excerpt:这篇文章介绍了如何在TypeScript环境下为Vue.js应用搭建项目结构,包括初始化配置、创建Vue组件、实现状态管理利用Vuex、配置路由以及性能优化的方法,旨在提升开发效率与应用性能。categ......
  • Java 数据类型 -- Java 语言的 8 种基本数据类型、字符串与数组
    大家好,我是栗筝i,这篇文章是我的“栗筝i的Java技术栈”专栏的第004篇文章,在“栗筝i的Java技术栈”这个专栏中我会持续为大家更新Java技术相关全套技术栈内容。专栏的主要目标是已经有一定Java开发经验,并希望进一步完善自己对整个Java技术体系来充实自己的......
  • 【Redis】Redis的数据过期策略有哪些
    Redis提供了多种数据过期策略,用于管理存储在其中的数据的生命周期。数据过期策略决定了何时以及如何删除过期的数据。主要的策略有以下几种:1.定时删除(TimedDeletion)在设置键的过期时间时,Redis会创建一个定时器,当过期时间到达时自动删除该键。这种方法的优点是删除操作......
  • C++多态详解:静态多态与动态多态的实现
    C++中的多态是面向对象编程的重要特性,允许相同的接口调用不同的实现。多态性可以分为两类:静态多态和动态多态。1.静态多态(编译时多态)(1)函数重载(FunctionOverloading):函数重载是一种静态多态,允许同一个函数名在同一作用域内具有不同的参数列表。这些不同的版本在编译时......
  • selenium的主要功能有哪些
    Selenium是一个广泛使用的开源工具,用于自动化web浏览器的操作。它主要用于web应用程序的测试,但也可以用于其他需要浏览器自动化的任务。以下是Selenium的主要功能:###1. 浏览器自动化 Selenium可以自动化各种web浏览器的操作,如Chrome、Firefox、Safari、Edge......
  • JDK23新特性:通过原始类型模式提升代码编写效率
    在JEP455中包含了通过增强switch语句,简化了代码编写,以及提高了代码的可读性。1.相关优化原始类型模式:您可以int,long,boolean在模式匹配结构中直接使用原始类型(例如等)。这样就无需对值进行不必要的装箱和拆箱。扩展的instanceof和switch:运算instanceof符和switch表达......
  • 深入剖析C++多态的实现与原理-详解
    目录多态基础虚函数虚函数的继承虚类/虚基类重写/覆盖条件:概念:多态的条件其他的多态行为多态中子类可以不写virtual协变代码举例继承遗留问题解决析构函数具体解决方式:题目1答案:解析:题目2答案:C++11override和finalfinal功能1:禁用继承使用场景:功能2:禁用重写使用场景overr......
  • Star-ccm+网格划分技巧之网格类型及适用场合
    大家在进行网格划分时有没有遇到这样的情况:1、画网格时间很长;2、画网格到中途发生错误,这时候就要用到并行网格划分(ParallelMeshing)。并行网格划分(ParallelMeshing)就是使用多个内核数来加速网格生成,同时比单个内核创建更大的网格。在对大型零件进行网格划分时,此功能特别有......
  • 自定义类型:结构体
    目录1.结构体类型的声明1.1结构体1.1.1结构体如何声明1.1.2结构体变量的创建和初始化1.2结构的特殊声明1.3结构的自引用2.结构体内存对齐2.1对齐规则2.2为什么存在内存对齐?2.3修改默认对齐数3.结构体传参4.结构体实现位段 4.1什么是位段4.2位段的......