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 中,booleancharbyteshortintlongfloatdouble 是原语(或有时称为内置)。其他一切都是对象。 @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是整数还是字符?

将chars用于int数据类型

请问一些关于char类型数据转换成16进制的问题!! 以及移位操作符~ 拜托了~~~~~

C语言中 int float double char long short

可以将boolean类型的数值转换为其他基本数据类型吗

Java面试题