Ada子程序的调用

上传人:豆浆 文档编号:36848460 上传时间:2018-04-03 格式:PDF 页数:4 大小:131.58KB
返回 下载 相关 举报
Ada子程序的调用_第1页
第1页 / 共4页
Ada子程序的调用_第2页
第2页 / 共4页
Ada子程序的调用_第3页
第3页 / 共4页
Ada子程序的调用_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《Ada子程序的调用》由会员分享,可在线阅读,更多相关《Ada子程序的调用(4页珍藏版)》请在金锄头文库上搜索。

1、Ada程序的调调程序(Calling Subprograms)调程序最简单的式就是按照程序声明的格式调,如前例的procedure swap(A:Integer;B:Integer),只要填的参数是Integer类型,便能直接使 swap (A,B)。 注意调程序时参数之间“,”隔开;同类型的参数在声明时也可简化,如procedure swap(A,B:Integer)。但使参数时还有下列种特殊情况.有名参数(Named Parameter)我们也可以不按照参数顺序调程序。如调 swap 也可以这样: swap(B = Y, A = X),这时是使有名参数,明确声明每个变量的值,可以不按照程序

2、声明中的参 数顺序赋值。这样的做的话可读性是好了点,较适合参数较多的情况。如果将有名参数和位置参数起混,只需遵守条规则:位置参数在有名参数前 。因此 swap 的调有以下种情况:swap(x , y);swap(A = x , B = y);swap(B = y , A = x);swap(x, B = Y);上述四种情况是样的。下列两种情况是法的:swap(y, A = x);-不合法swap(A = x , y); -不合法默认参数值(Default Parameter Values )在声明某个程序时,我们也可以使参数具有默认值,如下例:000 - filename:putlines.a

3、db 001 with Ada.Text_IO; use Ada.Text_IO; 002 with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;003 procedure putlines is 004 procedure putline(lines: integer:=1) is 005 begin 006 for count in 1.lines loop 007 New_Line; 008 end loop; 009 end putline; 010 Line :Integer;011 begin 012 Put (“Print Lines

4、 :“); Get (Line); 013 putline; 014 end putlines;实际上012可有可,因为调输出函数 putline 时,没参数。 putline 在声 明时赋予了参数 lines 个默认值 1,这样的话如果调 putline 没参数,就以 1 作 为参数值。上例也就只输出个空。如果putline有参数,如putline(Line),则输出的 数取决于 Line 的数值。重载(Overload)程序重载实际上通过先前的些例,细的朋友可能发现,过程 Put 能处理不能类型的参 数,不像 C 下的 printf 要选择输出类型,这就涉及到程序重载:只要参数不样, 程序

5、可以有相同的名称。如在程序包Ada.Text_IO的两个过程:procedure Put (Item : in Character);procedure Put (Item : in String);编译器会动选择合适的程序,如果Put后的参数为 Character类型,则调 procedure Put (Item : in Character);为 String 类型,则调procedure Put (Item : in String)。这样在户层上使程序简便了许多,很多常见的程 序:Get,Put_Line,Line, Page都是这样实现的-虽然在预定义程序包内针对不同参数都 有个程序与

6、之相对应,户却只要记住个名称就可以了。运算符重载运算符重载应该说时时刻刻都在-不同的数据类型都拥有相同的运算符:+,-,*,/等。 它的原理和程序重载是样的,在 Ada ,运算符也是通过程序形式来实现。下 就给出个“+”和 put 重载的例:000 - filename: overload.adb 001 with Ada.Text_IO; use Ada.Text_IO; 002 with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;003 procedure overload is 004 type Vector is array (1 . 5

7、 ) of Integer; 005 a, b, c :Vector;006 function “+“(left,right:Vector) return Vector is 007 result : Vector ; 008 begin 009 for i in leftrange loop 010 result(i) := left(i) + right(i); 011 end loop;012 return result; 013 end “+“;014 procedure Put (Item : Vector) is 015 begin 016 for i in Itemrange l

8、oop 017 Put (Item(i); 018 end loop; 019 end Put; 020 begin 021 a := (1,2,3,4,5); 022 b := (1,2,3,4,5); 023 c := a + b; 024 Put (c); 025 end overload;上例为了简化问题,有些实际中应该有的代码去除了-如检测所操作数的类型。但 其它类型的运算符和重载程序实现原理也和上例样。分离程序(Separating Subprogram)Ada 还允许程序分成多个部份,不是像以前的例样都塞在同件,如 将上例分成两个件:第个件:000 - filename: ove

9、rload.adb 001 with Ada.Text_IO; use Ada.Text_IO; 002 with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;003 procedure overload is 004 type Vector is array (1 . 5 ) of Integer; 005 a, b, c :Vector; 006 function “+“(left,right:Vector) return Vector is 007 result : Vector ; 008 begin 009 for i in leftra

10、nge loop 010 result(i) := left(i) + right(i); 011 end loop; 012 return result; 013 end “+“; 014 procedure Put (Item : Vector) is separate; 015 begin016 a := (1,2,3,4,5); 017 b := (1,2,3,4,5); 018 c := a + b; 019 Put (c); 020 end overload; 第个件: 000 -filename:overload-put.adb 001 separate (overload) -

11、 *注意结尾没有分号; 002 procedure Put (Item : Vector) is 003 begin 004 for i in Itemrange loop 005 Put (Item(i); 006 end loop; 007 end Put;这个程序和先前那个完全样,只是“分了家“已。这样分离程序有时能更好的分 解程序的任务,使程序结构更为清楚。注意下overload.adb的014 和 overload- put.adb的 001,这两句就是分离程序的主要语句。程序的内嵌扩展(Inline Expansion of Subprograms)程序可以在调地点被内嵌扩展,以提程序效率,它的格式为:pragma Inline(name);如果 name 是个可调的实体,程序或类属程序(见第章),那 么 pragma Inline 指在所有调该实体的地要求对该实体进内嵌扩展。这在封 装其它语的接时,使的较多,以提效率。W3Cschool()最的技术知识分享与学习平台此篇内容来于站户上传并发布。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号