当前位置: 首页 > news >正文

(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.lryc.cn/news/297505.html

相关文章:

  • ElementUI Data:Table 表格
  • 11.2 OpenGL可编程顶点处理:细分着色器
  • 微软正在偷走你的浏览记录,Edge浏览器偷疯了
  • 什么是数据库软删除,什么场景下要用软删除?(go GORM硬删除)
  • 计算机设计大赛 深度学习+python+opencv实现动物识别 - 图像识别
  • 我主编的电子技术实验手册(02)——仪表与电源
  • C语言----内存函数
  • 【力扣】快乐数,哈希集合 + 快慢指针 + 数学
  • c实现顺序表
  • 微软为新闻编辑行业推出 AI 辅助项目,记者参加免费课程
  • openssl3.2 - exp - buffer to BIO
  • Android 13.0 系统framework修改低电量关机值为3%
  • 【EAI 013】BC-Z: Zero-Shot Task Generalization with Robotic Imitation Learning
  • 一文讲透ast.literal_eval() eval() json.loads()
  • 微软.NET6开发的C#特性——类、结构体和联合体
  • naiveui 上传图片遇到的坑 Upload
  • 安全之护网(HVV)、红蓝对抗
  • Leetcode 213 打家劫舍 II
  • 【C语言】三子棋游戏实现代码
  • docker常用10条容器操作命令
  • 《MySQL 简易速速上手小册》第2章:数据库设计最佳实践(2024 最新版)
  • 利用YOLOv8 pose estimation 进行 人的 头部等马赛克
  • 【Python 千题 —— 基础篇】查找年龄
  • 前后端通讯:前端调用后端接口的五种方式,优劣势和场景
  • Mysql大表添加字段失败解决方案
  • (52)只出现一次的数字III
  • Linux增删ip
  • 【计算机网络】时延,丢包,吞吐量(分组交换网络
  • 张楠辞任抖音集团CEO;东方甄选将开服饰号;小红书新增“附近”一级入口;华为分红770亿元
  • ES监控方法以及核心指标