(delphi11最新学习资料) Object Pascal 学习笔记---第4章第2.4节(函数重载)

4.2.4 函数重载

​ 有时您可能想要两个非常相似但参数和实现不同的函数。传统做法是,您必须为每个函数想出一个稍微不同的名称,但是现代编程语言允许您对一个函数符号进行多次定义。

​ 重载的概念很简单:编译器允许您使用相同的名称定义两个或两个以上的函数或过程,前提是参数不同。通过检查参数,编译器可以确定您正在调用哪个版本的函数。

​ 考虑一下从运行时库的System.Math单元中提取的这系列函数:

function Min(A, B: Integer): Integer; overload;
function Min(A, B: Int64): Int64; overload;
function Min(A, B: Single): Single; overload;
function Min(A, B: Double): Double; overload;
function Min(A, B: Extended): Extended; overload;

​ 当您调用Min(10, 20)时,编译器确定您正在调用Min的多个版本中的第一个函数,它接受两个整数并返回一个整数。

​ 重载有两个基本规则:

  • 重载函数(或过程)的每个版本其后必须跟overload关键字(包括第一个版本)。
  • 重载的函数之间,参数的数量或类型必须有所不同。参数名称不用考虑,因为它们在调用时未指定。而且,返回类型不能用于区分两个重载的函数。

**注解:**不能根据返回值区分函数的规则有一个例外,那就是第 5 章中将介绍的隐式和显式(Implicit and Explicit conversion)转换操作符。

​ 以下是我添加到Overload-Test示例中的三个重载版本的ShowMsg过程:

procedure ShowMsg(Str: string); overload;
beginShow('Message: ' + Str);
end;procedure ShowMsg(FormatStr: string; Params: array of const); overload;
beginShow('Message: ' + Format(FormatStr, Params));
end;procedure ShowMsg(I: Integer; Str: string); overload;
beginShow(I.ToString + ' ' + Str);

​ 这三个函数显示了一个带有字符串的消息框,之后可以用不同的方式格式化字符串。以下是这三个过程的调用:

ShowMsg('Hello');
ShowMsg('Total = %d.', [100]);
ShowMsg(10, 'MBytes');

这是它们的效果:

  Message: HelloMessage: Total = 100.Message: 10 MBytes

小贴士: IDE的Code Parameters技术在处理重载的过程和函数时效果非常好。在键入例程名称后的开括号后,将列出所有可用的方案。随着输入参数,Code Insight技术使用它们的类型确定哪些可选方案仍然有效。

​ 如果尝试使用不匹配任何可用重载版本的参数调用函数会发生什么呢?当然,您会收到错误消息。假设您想调用:

ShowMsg(10.0, 'Hello');

​ 在这种情况下,您将看到一个非常明确的错误:

[dcc32 Error] E2250 There is no overloaded version of 'ShowMsg' that can be called with these arguments

​ 重载例程的每个版本都必须正确标记,这意味着不能重载未使用overload关键字标记的同一单元的现有例程。

​ 当您尝试这样做时,您会收到以下错误消息:

Previous declaration of '<name>' was not marked with the 'overload' directive.

​ 但是,您可以创建与不同单元例程同名的例程,因为单元充当了命名空间。在这种情况下,您并没有使用新版本重载了函数,而是使用新版本替换了该函数,隐藏了原始函数(可以使用单元名称前缀引用它)。这就是为什么编译器无法根据参数选择合适版本,但它将尝试匹配它看到的唯一版本,如果参数类型不匹配,则会发出错误。

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

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

相关文章

.[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复

导言&#xff1a; 在当今数字化时代&#xff0c;勒索病毒已成为网络安全领域的一大威胁。其中一种新近出现的勒索病毒是由[hudsonLcock.li].mkp[hendersoncock.li].mkp[myersairmail.cc].mkp制作的&#xff0c;它以其高效的加密算法和勒索方式而备受关注。本文91数据恢复将介绍…

七、Nacos源码系列:Nacos服务发现

目录 一、服务发现 二、getServices()&#xff1a;获取服务列表 2.1、获取服务列表 2.2、总结图 三、getInstances(serviceId)&#xff1a;获取服务实例列表 3.1、从缓存中获取服务信息 3.2、缓存为空&#xff0c;执行订阅服务 3.2.1、调度更新&#xff0c;往线程池中…

【Spring】Tomcat服务器部署

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;Spring⛺️稳中求进&#xff0c;晒太阳 单体项目部署 本地工作 项目在本地开发完毕之后进行一些必要参数的修改。 比如&#xff1a; 数据库的JDBC的配置文件&#xff0c;还有前端页面的…

项目02《游戏-06-开发》Unity3D

基于 项目02《游戏-05-开发》Unity3D &#xff0c; 接下来做 背包系统的 存储框架 &#xff0c; 首先了解静态数据 与 动态数据&#xff0c;静态代表不变的数据&#xff0c;比如下图武器Icon&#xff0c; 其中&#xff0c;武器的名称&#xff0c;描述&#xff…

Swift Combine 发布者publisher的生命周期 从入门到精通四

Combine 系列 Swift Combine 从入门到精通一Swift Combine 发布者订阅者操作者 从入门到精通二Swift Combine 管道 从入门到精通三 1. 发布者和订阅者的生命周期 订阅者和发布者以明确定义的顺序进行通信&#xff0c;因此使得它们具有从开始到结束的生命周期&#xff1a; …

课时17:本地变量_命令变量

2.2.3 命令变量 学习目标 这一节&#xff0c;我们从 基础知识、简单实践、小结 三个方面来学习。 基础知识 基本格式 定义方式一&#xff1a;变量名命令注意&#xff1a; 是反引号定义方式二&#xff1a;变量名$(命令)执行流程&#xff1a;1、执行 或者 $() 范围内的命令…

安卓——计算器应用(Java)

步骤 1: 设置Android Studio项目 创建一个新的Android项目&#xff0c;选择Java作为编程语言。 步骤 2: 设计用户界面 打开activity_main.xml文件&#xff0c;在res/layout目录下&#xff0c;设计你的计算器用户界面。这个例子使用了LinearLayout来排列两个EditText输入框和…

常用C++模版

目录 前言类型转换int 转 stringstring 转 int 进制转换10进制转n进制&#xff08; 2 ≤ n ≤ 16 , n ∈ Z 2\leq n\leq 16,n\in \mathbb Z 2≤n≤16,n∈Z&#xff09;n进制转10进制&#xff08; 2 ≤ n ≤ 16 , n ∈ Z 2\leq n\leq 16,n\in \mathbb Z 2≤n≤16,n∈Z&#xff0…

pycharm像jupyter一样在控制台查看后台变量

更新下&#xff1a;这个一劳永逸不用一个一个改 https://blog.csdn.net/Onlyone_1314/article/details/109347481 右上角运行

Spring IoC容器(四)容器、环境配置及附加功能

本文内容包括容器的Bean 及 Configuration 注解的使用、容器环境的配置文件及容器的附加功能&#xff08;包括国际化消息、事件发布与监听&#xff09;。 1 容器配置 在注解模式下&#xff0c;Configuration 是容器核心的注解之一&#xff0c;可以在其注解的类中通过Bean作用…

UniApp 快速上手与深度学习指南

一、UniApp 简介 UniApp 是中国DCloud公司研发的一款创新的跨平台应用开发框架,它基于广受欢迎的前端开发库Vue.js,旨在解决多端适配和快速开发的问题。通过UniApp,开发者能够采用一套统一的代码结构、语法和API来构建应用程序,从而实现真正意义上的“一次编写,到处运行”…

DevOps落地笔记-20|软件质量:决定系统成功的关键

上一课时介绍通过提高工程效率来提高价值交付效率&#xff0c;从而提高企业对市场的响应速度。在提高响应速度的同时&#xff0c;也不能降低软件的质量&#xff0c;这就是所谓的“保质保量”。具备高质量软件&#xff0c;高效率的企业走得更快更远。相反&#xff0c;低劣的软件…

消息中间件之RocketMQ源码分析(八)

RocketMQ中的消息过滤 RocketMQ设计了消息过滤&#xff0c;来解决大量无意义流量的传输:即对于客户端不需要的消息&#xff0c; Broker就不会传输给客户端&#xff0c;以免浪费宽带&#xff0c;RocketMQ4.2.0支持Tag过滤、SQL92过滤、Filter Server过滤 Tag过滤 第一步:用户发…

chrome扩展插件常用文件及作用

Chrome扩展通常包含以下常用文件及其作用&#xff1a; manifest.json&#xff1a; 描述了扩展的基本信息&#xff0c;如名称、版本、权限、图标等。定义了扩展的各种组件和功能&#xff0c;包括后台脚本、内容脚本、页面、浏览器动作按钮等。 background.js&#xff1a; 后台脚…

蓝桥杯Web应用开发-CSS3 新特性【练习三:文本阴影】

文本阴影 text-shadow 属性 给文本内容添加阴影的效果。 文本阴影的语法格式如下&#xff1a; text-shadow: x-offset y-offset blur color;• x-offset 是沿 x 轴方向的偏移距离&#xff0c;允许负值&#xff0c;必须参数。 • y-offset 是沿 y 轴方向的偏移距离&#xff0c…

Swift Combine 管道 从入门到精通三

Combine 系列 Swift Combine 从入门到精通一Swift Combine 发布者订阅者操作者 从入门到精通二 1. 用弹珠图描述管道 函数响应式编程的管道可能难以理解。 发布者生成和发送数据&#xff0c;操作符对该数据做出响应并有可能更改它&#xff0c;订阅者请求并接收这些数据。 这…

LoveWall v2.0Pro社区型校园表白墙源码

校园表白墙&#xff0c;一个接近于社区类型的表白墙&#xff0c;LoveWall。 源码特色&#xff1b; 点赞&#xff0c; 发评论&#xff0c; 发弹幕&#xff0c; 多校区&#xff0c; 分享页&#xff0c; 涉及违禁物等名词进行检测&#xff01; 安装教程: 环境要求&#xff1b;…

一文读懂|Apollo自动驾驶平台9.0全面解读

2023年12月19日&#xff0c;百度正式推出了Apollo开放平台的全新升级版本--Apollo开放平台9.0&#xff0c;面向所有开发者和生态合作伙伴&#xff0c;以更强的算法能力、更灵活易用的工具框架&#xff0c;以及更易拓展的通用场景能力&#xff0c;继续构筑自动驾驶开发的领先优势…

极限的反问题【高数笔记】

1. 什么是极限反问题&#xff1f; 2. 极限反问题分为几类&#xff1f; 3. 每一类极限反问题的具体做法是什么&#xff1f; 4. 每一类极限反问题具体做法是否有前提条件&#xff1f; 5. 例题&#xff1f;

Ubuntu上开启SFTP服务教程

我是卷福同学&#xff0c;目前开始从事安全方面工作&#xff0c;努力学习网络安全基础知识&#xff0c;了解FTP、SFTP、RSYNC服务 在Ubuntu服务器上安全地传输文件&#xff0c;SFTP&#xff08;SSH文件传输协议&#xff09;是一个理想的选择。相比于传统的FTP&#xff0c;SFTP通…