有人告诉我,Ada支持布尔值之间的“或” . 我的目标是能够使用支持整数类型0和1的泛型为此函数编写重载 . (我知道我可以添加它们以获取返回值:如果sum> = 1,则返回1,否则返回0)我只是不知道这看起来像代码是什么 . 以下是我的老师希望它看起来的一个例子,这里“*”被重载:
generic
type MyType is private;
with function "*"(x,y: MyType) return MyType;
with procedure Put(x: MyType);
package gioex is
type Rectangle is
record
Length: MyType;
Width: MyType;
end record;
function Size(r: in Rectangle) return MyType;
function RectLength(r: in Rectangle) return MyType;
end gioex;
程序Put(...)和函数“*”(...)没有在泛型的主体中定义,而是在程序文件中定义:
with Ada.Text_IO; use Ada.Text_io;
with GIOEX;
procedure UseGioex2 is
package MyIntIO is new Ada.Text_IO.Integer_IO(Integer);
package MyFloatIO is new Ada.Text_IO.Float_IO(Float);
type VenusMeasure is record
F1: Integer;
F2: Float;
end record;
-- Define I/O for VenusMeasurement.
procedure Put(v: VenusMeasure) is
begin
MyIntIO.put(v.F1);
put(" ");
MyFloatIO.put(v.F2);
new_line;
end;
-- Define mutliplication for VenusMeasurement.
function "*"(p1: VenusMeasure; p2: VenusMeasure)
return VenusMeasure is
temp: VenusMeasure;
begin
temp.F1 := p1.F1 * p2.F1;
temp.F2 := p1.F2 * p2.F2;
return temp;
end;
package MyVenusRectangle
is new GIOEX(VenusMeasure, Put, "*");
use MyVenusRectangle;
width: VenusMeasure := ( 5, 5.5);
height: VenusMeasure := (3, 2.4);
Rect1: Rectangle := (width, height); -- Creates a rectangle using
-- Venus measurements.
Ans: VenusMeasure;
begin
Ans := Size( Rect1 );
end UseGIOEx2;
我是阿达的新手 . 我不确定为什么在通用.ads文件中使用“with”(我认为它与已经定义的“*”和“Put”有关) . 我的理解是,.ads文件中声明的任何过程/函数都需要在body .adb文件中定义,但这里带有“with”的过程/函数在实际的.adb文件中定义 . 澄清后,我确信我可以写出“或”超载!谢谢!