6

有什么区别?

4

3 回答 3

9

首先是术语:它是“Ada”,而不是“ADA”——它是以“Ada Lovelace”命名的;它不是首字母缩略词。

子类型与其基类型兼容,因此您可以将基类型的操作数与基类型的操作数混合。例如:

subtype Week_Days is Integer range 1..7;

由于这是一个子类型,您可以(例如)添加1到工作日以获得下一个工作日。

派生类型是完全独立的类型,具有与其基类型相同的特征。不能将派生类型的操作数与基类型的操作数混合。例如,如果您使用:

type Week_Day is new Integer range 1..7;

那么您将无法将整数添加到工作日以获得另一个工作日。要对派生类型进行操作,您通常需要自己定义这些操作(例如,创建一个包)。同时,派生类型确实“继承”了其基类型的所有操作(即使是一些可能没有意义的操作),因此您仍然可以得到加法。

于 2010-04-20T19:08:01.640 回答
2

来自维基书籍

给定类型的子类型将相互兼容。

派生类型是从现有类型创建的新的、成熟的类型。像任何其他类型一样,它与其父类型不兼容;但是,它继承了为父类型定义的原始操作。

于 2010-04-20T19:11:42.847 回答
1

基本区别在于派生类型是不同的类型。您不能只将一个分配给另一个,或者在表达式中一起使用它们。另一方面,子类型与其原始类型是赋值兼容的。您可以一起使用它们,而无需输入任何类型转换代码。

不过,子类型的范围将比基本类型更窄,因此可能会有范围检查(我相信可以从中提高 Constraint_Error)。所以你还是要小心。

于 2010-04-20T19:42:19.527 回答