【问题标题】:Is assignment the only difference between derived types and subtypes in Ada?赋值是 Ada 中派生类型和子类型之间的唯一区别吗?
【发布时间】:2018-06-21 11:29:54
【问题描述】:

我读到派生类型与它们各自的父类型完全不同,但是它们确实继承了它们所有父类型的操作。

换句话说,您可以将派生类型A 传递给一个操作,该操作接收B 类型作为参数,它是A 的父类型。但是,您不能将 A 类型的变量分配给 B 类型之一,反之亦然。

根据上述,派生类型和子类型之间的唯一区别是赋值。对吗?

【问题讨论】:

标签: ada derived-types subtyping


【解决方案1】:

派生类型仅继承其派生类型的原始操作

从技术上讲,类型派生会创建一组新的原始操作,因此您不能“将派生类型 A 传递给以 B 为参数的操作,该类型是 A 的父级” .但是编译器会创建具有相同名称和实现的操作,这些操作从B 类型的原始操作中对A 类型起作用。例如,您可以通过显式声明抽象来删除继承的操作。

【讨论】:

  • 在这种情况下,原始操作到底是什么意思?
  • 语言参考手册3.2.3节中的定义:adaic.org/resources/add_content/standards/12rm/html/…
  • 据我了解,T 类型的所有操作都是该类型的原始操作,对吗?如果不是,能否给我一个不被视为原始类型 T 的操作示例?
  • 对不同包中声明的类型的操作。
  • 那么,主要区别(除了赋值)是 T 的子类型可以用于所有 T 操作,无论是否为原始操作。那么,这将是两个不同之处,对吗?
猜你喜欢
  • 1970-01-01
  • 2014-05-02
  • 2023-03-19
  • 2013-08-15
  • 2013-10-07
  • 2020-10-04
  • 1970-01-01
  • 2012-12-09
  • 2020-06-01
相关资源
最近更新 更多