在Ada语言中不存在隐式转换,所有的计算必须保证类型的匹配,而且需要转换类型的时候必须指明转换后的类型。否则会导致运行时错误.仍需值得注意的是,
package My_Int_IO is new Ada.Text_IO.Integer_IO(MY_INT_TYPE);
当我们试图重新定义一个新的类型的时候,如果想要对其进行输出等操作需要Ada.Text_IO 的通用包的实例化。以提供输出MY_INT_TYPE的值到监视器或文件,或从键盘或文件输入的能力.
这里已经是属于面相对象的范畴了,在初级阶段不在过多的展开。
with Ada.Text_IO,Ada.Integer_Text_IO;
use Ada.Text_IO,Ada.Integer_Text_IO;
procedure Subtypes is
type MY_INT_TYPE is range -10_000..20_000;
My_Int : MY_INT_TYPE;
package My_Int_IO is new Ada.Text_IO.Integer_IO(MY_INT_TYPE);
use My_Int_IO;
subtype SUB_INT is Integer range 12..144;
Thing :SUB_INT;
Count :Integer;
Stuff :Integer range 12..144;
START :constant :=4; -- start is 4
STOP :constant :=START+13; -- STOP is 17
Example :SUB_INT range 4*START..2*STOP+7; -- 16..41
Example2 :MY_INT_TYPE range START ..2*STOP+7; -- 4..41
begin
Thing :=6*3; -- thing is 18
Count :=Thing + 17; -- count is 35
Stuff :=Count-Thing; -- stuff is 17
My_Int :=6*3; -- myint is 18
My_Int :=MY_INT_TYPE(Thing+17); -- myint is 35
My_Int :=MY_INT_TYPE(Thing)+17; -- myint is 35
My_Int := MY_INT_TYPE(Thing)-10; -- myint is 8
-- My_Int :=MY_INT_TYPE(Thing-10); -- Run time error
My_Int:=35;
Thing := SUB_INT(My_Int-17); -- thing is 18
-- Thing :=SUB_INT(My_Int)-17; --Run time error
-- Example :=Thing +SUB_INT(My_Int);
end Subtypes;