(delphi11最新学习资料) Object Pascal 学习笔记---第4章第2.5节(重载和模糊调用)

4.2.5 重载和模糊调用

​ 当调用一个重载的函数时,编译器通常会找到匹配的版本并正确工作,或者如果没有任何重载版本具有正确匹配的参数(正如我们刚刚看到的),则会报出错误。

​ 但还有第三种情况:假设编译器可以对函数的参数进行一些类型转换,则单个调用可能会有不同的可能转换。当编译器找到它可以调用的函数的多个版本,并且没有一个是完全类型匹配的版本(将被选取)时,它会发出一条错误消息,指示函数调用不明确。

​ 这不是一个常见的场景,我不得不构建一个相当不合逻辑的例子来向你展示它,但值得考虑这种情况(因为它在现实世界中偶尔会发生)。

​ 假设您决定实现两个重载函数把一个整数和浮点数相加:

function Add(N: Integer; S: Single): Single; overload;
beginResult := N + S;
end;function Add(S: Single; N: Integer): Single; overload;
beginResult := N + S;
end;

​ 这些函数在 OverloadTest 示例中。现在,您可以以任何顺序传递两个参数来调用它们:

Show(Add(10, 10.0).ToString);
Show(Add(10.0, 10).ToString);

​ 但事实上,一般来说,函数可以进行转换接受不同类型的参数,例如,当函数期望参数为浮点类型时,可以接受整数类型的参数。那么,如果您调用:

Show(Add(10, 10).ToString);

​ 编译器可以调用重载函数的第一个版本,但它也可以调用第二个版本。如果编译器不知道你在要求什么(也不知道调用一个函数或另一个函数是否会产生相同的效果),它就会报出错误信息:

[dcc32 Error] E2251 Ambiguous overloaded call to 'Add' Related method: function Add(Integer; Single): Single; Related method: function Add(Single; Integer): Single;

小贴士:在集成开发环境的错误窗格中,你会看到上面第一行的错误信息,边上有一个加号,可以展开查看下面两行,详细说明了编译器认为哪些重载函数有歧义。

​ 如果这是一个真实的情况,并且您需要进行函数调用,您可以添加手动类型转换调用来解决问题,并向编译器指示您想要调用函数的哪个版本:

Show(Add(10, 10.ToSingle).ToString);

​ 如果您使用变体(variants),这是一种我将在本书后面介绍的相当独特的数据类型,有可能出现模糊调用的特殊情况。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/675976.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go语言每日一练——链表篇(四)

传送门 牛客面试笔试必刷101题 ----------------合并两个排序的链表 题目以及解析 题目 解题代码及解析 package main import _"fmt" import . "nc_tools" /** type ListNode struct{* Val int* Next *ListNode* }*//*** 代码中的类名、方法名、参…

ClickHouse表常用引擎

1 TinyLog 特点: 是最简单的表轻量引擎(最多约100万行), 一写多读的应用场景。同时读写会损害数据;TinyLog 表经常作为中间表,用于数据的微批量处理. 语法中无需携带任何参数;它将数据保存到磁盘. 每个字段…

【Docker】了解Docker Desktop桌面应用程序,TA是如何管理和运行Docker容器(2)

欢迎来到《小5讲堂》,大家好,我是全栈小5。 这是《Docker容器》系列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对…

Sqlite3安装步骤

1、Sqlite3以下载文件,配置环境变量的方式进行安装。 2、下方链接为官方的下载地址。 sqlite下载地址 2.1、需要两个下载文件,解压后将他们放在一起,假设解压后的路径为E:\sqlite。 sqlite-dll-win-x64-3450100.zip sqlite-tools-win-x6…

【数据结构】数据结构

本文是基于中国MOOC平台上,华中科技大学的《数据结构》课程和浙江大学的《数据结构》课程所作的一篇课程笔记,便于后期讲行系统性查阅和复习。 从个人感受而言,华中科技大学的课程讲解更适合初学者(缺点在于,从概念到…

linux 07 存储管理

02. ext4是一种索引文件系统 上面是索引节点inode,存放数据的元数据 下面是存储块block,主要存放有关的信息 03.linux上的inode 查看文件中的inode ll -i 文件名 磁盘中的inode与文件数量

STM32学习笔记——定时器

目录 一、定时器功能概述 1、基本定时器(TIM6&TIM7) 工作原理 时序 2、通用计时器(TIM2&TIM3&TIM4&TIM5) 时钟源 外部时钟源模式1&2 外部时钟源模式2 外部时钟源模式1 定时器的主模式输出 输入捕获…

C++的多态(Polymorphism)

C中的多态(Polymorphism)是面向对象编程的一个重要概念,它允许以不同的方式使用同一个接口来处理不同类型的对象。多态性可以通过函数重载、运算符重载和虚函数实现。 多态的基本概念是:通过基类的指针或引用,可以在运…

linux系统非关系型数据库redis去中心化模式

redis去中心化模式 去中心化模式配置文件更改增加节点添加主节点添加从节点分配槽位 减少节点回收槽位下线主机 去中心化模式 配置文件更改 每个节点的配置文件更改 vim redis.confport 7001 #该节点端口 cluster-enabled yes cluster-config-file nodes.conf cluster-nod…

Oracle PL/SQL Programming 第6章:Exception Handlers 读书笔记

总的目录和进度,请参见开始读 Oracle PL/SQL Programming 第6版 无论如何努力,您的程序中总会再出现一个错误。但我们仍应实现调试和保护我们的程序。PL/SQL 提供了一种强大而灵活的方法来捕获和处理错误。 Exception-Handling Concepts and Terminolo…

如何将ChatGPT升级到4.0版本?如何充值?

如何将ChatGPT升级到4.0版本? 在人工智能的世界里,每一个升级都可能带来革命性的变革。ChatGPT的4.0版本无疑是当前最炙手可热的话题之一,那么如何进行升级,体验到这一版所带来的全新特性呢?以下是一步一步的指南。 …

PySpark(四)PySpark SQL、Catalyst优化器、Spark SQL的执行流程、Spark新特性

目录 PySpark SQL 基础 SparkSession对象 DataFrame入门 DataFrame构建 DataFrame代码风格 DSL SQL SparkSQL Shuffle 分区数目 DataFrame数据写出 Spark UDF Catalyst优化器 Spark SQL的执行流程 Spark新特性 自适应查询(SparkSQL) 动态合并 动态调整Join策略 …

一周学会Django5 Python Web开发-Django5创建项目(用命令方式)

锋哥原创的Python Web开发 Django5视频教程: 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计11条视频,包括:2024版 Django5 Python we…

js中new操作符详解

文章目录 一、是什么二、流程三、手写new操作符 一、是什么 在JavaScript中,new操作符用于创建一个给定构造函数的实例对象 例子 function Person(name, age){this.name name;this.age age; } Person.prototype.sayName function () {console.log(this.name) …

编曲学习:旋律创作基础概念 和弦进行作曲 和弦外音使用 作曲技巧

旋律创作基础概念 和弦进行作曲 和弦外音使用 作曲技巧https://app8epdhy0u9502.pc.xiaoe-tech.com/live_pc/l_65be1ba7e4b064a83b92a3d7?course_id=course_2XLKtQnQx9GrQHac7OPmHD9tqbv文档https://app8epdhy0u9502.pc.xiaoe-tech.com/p/t_pc/course_pc_detail/camp_pro/cour…

【Larry】英语学习笔记语法篇——从句=连词+简单句

目录 三、从句连词简单句 1、必须有连词 主从结构 疑问词的词性 2、名词性从句 同位语从句 形式主语 形式宾语 that的省略 3、形容词性从句(上) 关系代词 关系词的作用 介词前置问题 4、形容词性从句(中) 定语关系…

【开源】SpringBoot框架开发医院门诊预约挂号系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 功能性需求2.1.1 数据中心模块2.1.2 科室医生档案模块2.1.3 预约挂号模块2.1.4 医院时政模块 2.2 可行性分析2.2.1 可靠性2.2.2 易用性2.2.3 维护性 三、数据库设计3.1 用户表3.2 科室档案表3.3 医生档案表3.4 医生放号…

vue3 之 商城项目—home

home—整体结构搭建 根据上面五个模块建目录图如下&#xff1a; home/index.vue <script setup> import HomeCategory from ./components/HomeCategory.vue import HomeBanner from ./components/HomeBanner.vue import HomeNew from ./components/HomeNew.vue import…

k8s filebeat 应用日志搜集

方案&#xff1a; 采用node上部署filebeat&#xff0c;并监控node上的日志记录&#xff0c;应用pod的日志文件它通过磁盘挂载将其输出到node的本地filbeat监控目录上。 实施&#xff1a; filebeat使用daemonSet&#xff08;见附录&#xff09;进行构建&#xff1a; 【k8s】…

让macOS外接键盘Home/End键可用

让 Mac 外接键盘支持 HOME 键_macos home键-CSDN博客 步骤&#xff1a; 1、打开终端创建文件夹&#xff0c;并编辑 DefaultKeyBinding.dict 文件 mkdir -p ~/Library/KeyBindings vim ~/Library/KeyBindings/DefaultKeyBinding.dict 2、往DefaultKeyBinding.dict添加下面的内容…