【问题标题】:What is the difference between the concept of 'class' and 'type'?“类”和“类型”的概念有什么区别?
【发布时间】:2011-03-28 17:52:40
【问题描述】:

我知道这个问题已经被问过了,但我没有完全正确,我想知道,哪个是基类、类或类型。我有几个问题,请帮我解决,

  1. 类型是编程数据类型的基础吗?
  2. 类型被硬编码到语言本身中。类是我们可以自己定义的东西吗?
  3. 什么是无类型语言,请举例说明
  4. 类型不属于 oop 概念,我的意思是它不限于 oop 世界

请帮我解决这个问题,谢谢。

【问题讨论】:

  • 命名法可能因语言而异。
  • "a little" == "太多了,除非您指定语言,否则无法回答您的问题"
  • 这不是 BCS 考试中所问的特定语言问题,尽管我有疑问
  • 感谢大家在这么短的时间内给了我这么好的答案,做得很好的社区。​​span>

标签: oop class types


【解决方案1】:

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

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

2/ 不。类型和类我们都可以定义它。 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】:

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

    我最初来自 C 世界,在语言定义的类型(如 int)和您自己使用 typedefstruct 制作的类型之间没有真正的区别。

    同样,在 C++ 中,std::string 和您自己组合的任何类之间几乎没有区别(可能没有区别),除了 std::string 现在几乎肯定没有错误。在我们自己的代码中并不总是需要这样做:-)

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

    在某些语言中,整数(在集成而不是整数的意义上)类型和类类型之间存在根本区别。类可以扩展,但 intfloat(C++ 的示例)不能。

    【讨论】:

      【解决方案3】:

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

      因此,举个例子,当你定义一个函数时,你指定应该传递给函数的数据类型和返回的数据类型:

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

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

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


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

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

      【讨论】:

      • 感谢您的帮助
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-20
      相关资源
      最近更新 更多