有什么区别?
答案 0 :(得分:8)
首先,术语:它是“Ada”,而不是“ADA” - 它以“Ada Lovelace”命名;它不是首字母缩略词。
子类型与其基类型兼容,因此您可以将基类型的操作数与基类型的操作数混合。例如:
subtype Week_Days is Integer range 1..7;
由于这是一个子类型,您可以(例如)将1
添加到工作日以获得下一个工作日。
派生类型是一种完全独立的类型,具有与其基本类型相同的特征。您不能将派生类型的操作数与基类型的操作数混合。例如,如果您使用:
type Week_Day is new Integer range 1..7;
然后你不能够在工作日添加一个整数来获得另一个工作日。要对派生类型进行操作,通常您自己定义这些操作(例如,创建包)。同时,派生类型会“继承”其基类型的所有操作(即使是一些可能没有意义的操作),因此您仍然可以添加。
答案 1 :(得分:2)
答案 2 :(得分:1)
基本区别在于派生类型是不同类型。您不能只将一个分配给另一个,或者在表达式中一起使用它们。另一方面,子类型与其原始类型分配兼容。您可以一起使用它们,而无需输入任何类型的代码。
子类型的范围比基本类型的范围窄,因此可能会进行范围检查(我相信Constraint_Error可以从中进行检查)。所以你还是要小心。