int、char 也是抽象数据类型吗?
Posted
技术标签:
【中文标题】int、char 也是抽象数据类型吗?【英文标题】:Are int, char also an Abstract Data Type? 【发布时间】:2015-06-06 19:29:15 【问题描述】:我想知道 C、C++ 和 Java 中的所有原始数据类型都是抽象数据类型,因为它们的实现是隐藏的。
还有一件事:
我想问的是,一个ADT是否有抽象视图(所有可以在上面操作的功能)和实现视图(函数和数据类型是如何实现的)两部分。那么如何在 C++ 中创建 ADT??
和java一样,抽象视图可以使用接口来实现,而实现视图可以使用类来实现。
【问题讨论】:
Java 中的原始类型不是对象,因此不是抽象的。 只是为了完成列表:在 Java 中,boolean
、char
、byte
、short
、int
、long
、float
和 double
是原语(或有时称为内置)。其他一切都是对象。
@Turing85 我会说:其他一切都是(reference) type。
好吧,JLS 和 VM Spec 中有确切的定义,如果这就是您要问的。
“抽象”是一种只适用于对象的品质。这意味着实现的部分留给子类。这不适用于原始类型,因为它们不是对象,不能被继承。
【参考方案1】:
想想抽象与具体(这里的具体术语是为了说明目的。
不能创建抽象类,但可以创建具体类。当您从抽象类继承并定义所有抽象方法时,它现在是具体的。
因为您可以实例化 int
,所以它不是抽象的,而是具体的
实现抽象并不是隐藏实现,而是它还没有被定义。
如果您有一个抽象基类,那么某些功能必须由其子类定义。可见性无关紧要。你不能从int
继承它是一个POD(plain old data)类型
在 C++ 中std::string
有一个可见的实现,在 java 中,它的一部分是隐藏的(这就是为什么 + 可以用于在 Java 中连接字符串)
【讨论】:
我真的对抽象感到困惑。是像完整参考中引用的那样向用户隐藏复杂性还是您所说的那样 查看 [abstract-data-type] 的描述。它是接口,与实现无关。隐藏复杂性或实施是另一回事。它定义了实现可以做什么。 你成功了 -It is not that an implementation is hidden that makes it abstract, it is that it is is yet to be defined.
【参考方案2】:
ADT 是一个概念,它定义了对数据的某种操作,例如您可以在堆栈中压入或弹出堆栈。您可以用任何语言以任何方式实现 ADT,但它必须包含这些操作。 Int、float、strings、list、set 等都是 ADT。现在,当您用任何语言实现它们时,它们就会变成具体类型。就像您可以在 python 中创建一个列表一样,但这将是一个具体的类型,因为列表 ADT 有一个实际的代码实现。而 LIST 本身是一个抽象概念,它具有与之相关的某些操作。
【讨论】:
以上是关于int、char 也是抽象数据类型吗?的主要内容,如果未能解决你的问题,请参考以下文章
请问一些关于char类型数据转换成16进制的问题!! 以及移位操作符~ 拜托了~~~~~