'class'和'type'的概念有什么区别?

时间:2010-08-12 04:33:17

标签: oop class types

我知道这个问题已经被问到了,但我没有把它弄得很对,我想知道,这是基础的,类或类型。我有几个问题,请为我清楚,

  1. 是否键入编程数据类型的基础?
  2. 类型被硬编码到语言本身。我们可以自己定义课程吗?
  3. 什么是无类型语言,请举一些例子
  4. 类型不属于oop概念,我的意思是它不仅限于oop世界
  5. 请清楚这一点,谢谢。

3 个答案:

答案 0 :(得分:1)

这很可能取决于语言。我在OO中将类型和类视为相同的东西,只区分类(对象族的定义)和实例(或对象),类的具体具体事件。

我最初来自一个C世界,其中int之类的语言定义类型与您使用typedefstruct创建的类型之间没有真正的区别。

同样地,在C ++中,std::string和你自己组合的任何类之间几乎没有差异(可能没有),除了std::string几乎肯定是无bug的事实。在我们自己的代码中并不总是必要的: - )

我听说人们认为类型是没有方法的类,但我不相信这种区别(再次因为我的C / C ++背景)。

在积分(在集成而非整数意义上)类型和类类型之间的某些语言的基本差异。可以扩展类,但intfloat(C ++示例)不能。

答案 1 :(得分:1)

我没有使用多种语言。也许,我的问题是正确的:Java,C#,Objective-C

1 /我认为类型实际上是人们谈论它的数据类型。

2 / No.我们可以定义类型和类。类A的对象具有类型A.例如,如果我们定义String s = "123";,则s具有类型String,属于类String。但反之亦然。

例如:

class B {}
class A extends B {}
B b = new A();

然后你可以说b有B类,属于A类和B类。但是b没有A类。

3 /无类型语言是一种允许您更改变量类型的语言,如javascript。

var s = "123";  // type string
s = 123; // then type integer

4 /我不太了解,但我认为它不仅限于oop。它也可以是程序编程

答案 2 :(得分:1)

在OOP语言中,类指定对象的定义。在许多情况下,该对象可以作为函数中参数匹配等类型的类型。

因此,举例来说,在定义函数时,指定应传递给函数的数据类型以及返回的数据类型:

int AddOne(int value) { return value+1; }使用int类型作为返回值和传入的参数。

在具有两者的语言中,类型和类/对象的概念几乎可以互换。但是,有许多语言没有这两种语言。例如,我认为标准C不支持自定义对象,但它确实仍然有类型。另一方面,PHP和Javascript都是类型定义非常松散的语言示例(基本上,类型是单项,集合/数组/对象或未定义[仅限js]),但它们完全支持类/对象

另一个关键区别:您可以使用与类/对象关联的方法和自定义函数,但不能使用标准数据类型。


希望澄清一些。回答您的具体问题:

  1. 在某些方面,类型可以被视为编程的基本概念,是的。
  2. 是的,但可以将类视为函数中的类型,例如上面的示例。
  3. 无类型语言允许您交替使用任何类型的变量。这意味着您可以处理具有处理int的相同代码的字符串。在实践中,大多数“无类型”语言实际上实现了一个名为duck-typing的概念,因为他们说“如果它像鸭子一样,它应该像鸭子一样对待”,并尝试使用任何变量作为有意义的类型遇到的代码。同样,php和javascript是两种语言,可以做到这一点。
  4. 非常正确,类型适用于OOP世界之外。