int和char也是抽象数据类型吗?

4
我希望知道C、C++和Java中的所有原始数据类型是否都是抽象数据类型,因为它们的实现被隐藏了。
还有一件事:
我想问一下,如果一个ADT有两部分抽象视图(所有可以对其进行操作的函数)和实现视图(如何实现函数和数据类型)。那么我该如何在C++中创建一个ADT?
就像在Java中,抽象视图可以使用接口来实现,而实现视图可以使用类来实现。

5
Java中的原始类型不是对象,因此也不是抽象的。 - RealSkeptic
1
只是为了完整性:在Java中,booleancharbyteshortintlongfloatdouble是原始类型(有时称为内置类型)。其他所有内容都是对象。 - Turing85
1
@Turing85 我会说:其他所有的都是(引用)类型 - Gerold Broser
2
好的,如果您想了解确切的定义,可以参考JLSVM Spec - RealSkeptic
2
“抽象”是仅适用于对象的一种特性。它意味着实现的一部分留给子类。这不适用于原始类型,因为它们不是对象,不能被继承。 - RealSkeptic
显示剩余3条评论
2个回答

6

抽象与具体的概念(此处“具体”一词仅为说明目的而使用)。

抽象类不能被创建,具体类可以被创建。当您从一个抽象类继承并定义所有抽象方法时,它就变成了具体类。

因为您可以实例化一个整数,所以它不是抽象的,而是具体的。

一个实现被隐藏,并不是使它抽象,而是因为它尚未被定义。

如果您有一个抽象基类,则其某些功能必须由其子级定义。可见性是无关紧要的。您不能从int继承,它是一个POD(普通旧数据)类型。

在C++中,std::string具有可见的实现,在Java中,部分实现是隐藏的(这就是为什么可以使用+来连接字符串的原因)。


我真的对抽象概念感到困惑。它是像在《Java编程完全参考》中引用的隐藏复杂性吗?还是你所说的另外一种形式? - Nitish Chopra
1
看一下 [抽象数据类型] 的描述。它是接口,不考虑实现。隐藏复杂性或实现是另一回事。它定义了实现可以做什么。 - Glenn Teitelbaum
1
你做得很好 - “一个实现被隐藏并不是使它抽象,而是因为它尚未被定义。” - RBT

0

ADT是一种概念,定义了数据上的某些操作,例如您可以在堆栈中推送或弹出。您可以在任何语言和任何方式中实现ADT,但它必须具有这些操作。Int,float,strings,list,set等都是ADT。现在,当您在任何语言中实现它们时,它们就变成了具体类型。例如,您可以在Python中创建一个列表,但那将是一个具体类型,因为存在列表ADT的实际代码实现。而LIST本身是一个抽象概念,具有与之相关联的某些操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接