一个对象可以被看作一个变量吗?

Can an object be considered as a variable?

本文关键字:一个 变量 一个对象      更新时间:2023-10-16

我在区分类、对象、变量和数据类型方面遇到了一些麻烦。

类可以被视为数据类型吗?一个对象可以被看作一个变量吗?

还有,技术上的区别是什么?

这些术语有两种不同的用法:

  • 休闲用途:

    • 类:带有方法和字段的抽象数据类型
    • 对象:类的实例。
    • 变量:某些存储块的语言级名称(即:程序员给出的名称)。
    • 数据类型:变量(或一些未命名的存储块)可以拥有的类型。
  • C/c++标准用法(来自C标准,它不是面向对象的语言):

    • Object:某块存储空间,不管它是否有名称
    • 类类型对象:数据类型为Class (=struct)的存储块。

变量是具有直接名称的对象。

int i;

i是一个变量,也是一个对象。

int* p = new int;

*p是对象,但不是变量。

类和类型几乎相同,除了类型包括int这样的基本类型。实际上,它们和变量/对象一样是可以互换的。c++标准的实际情况是,很少有规则适用于类而不是类型,很少有规则适用于变量而不是对象。

一个类可以被认为是一组作用域函数和私有变量。对象是类的实例,例如,toyata可以是类Car的对象实例。变量是一个标识符。它表示一个标识符,它的值和状态可以随时间变化数据类型表示数据的类型。

例如,假设Car是一个类。然后输入语句:
Car toyata;

具有类、数据类型、标识符(变量)和对象。

数据类型是一种强烈指示某些数据使用方式的方法(在强类型语言中,如c++)。例如,int数据类型让您知道可以执行传统上与整数(整)数相关的操作。当某些东西具有char数据类型时,它可以让您知道它可以像字符一样使用(例如,字母表中的一个字母)。这两个是基本数据类型的例子——内置于语言中。

类(通常是*)是汇编一些数据的一种方式,并给它一个唯一的接口来访问和修改该数据。就像可以加减整数或除法浮点数(不截断)一样,放在类中的函数决定了程序如何使用它。类似地,其他人创建的类提供了一个接口,这样您就可以像使用整数一样使用这些类的对象。

变量是某种数据类型的个体实例。如果有int number = 0;,这是一个变量。这与"常量"形成对比,即不可修改的符号,如const double pi = 3.14159;

"对象"这个词可以被认为是模棱两可的——大多数时候,当人们使用"对象"这个词时,他们指的是"某些classstruct的实例"。有时用来指代类。这可能会令人困惑,但随着您熟悉这些术语,就会变得更清楚。

总之,类可以是数据类型(通常是*)。对象可以是变量(或者常数)。你做对了!你对这些术语读得越多或使用得越多,它们之间的区别就越清楚。

*当我说"通常"时,我的意思是-通常在使用c++的过程中,您将遇到的所有代码都会以某种方式使用类来表示数据。然而,在极少数情况下,有些人会想到创建一个纯静态接口的类——没有数据。在他们的辉煌时刻,他们决定将构造函数设为私有,不允许实例化(创建所谓的"单例")。我从来没有把它们称为类型,或者听别人把它们称为类型。我很高兴在这一点上得到纠正,但现在,这就是我的立场。

是的,您可以将类视为数据类型,也可以将类的实例视为变量。

但是一个类可以不仅仅是一个数据类型——它支持将方法与数据捆绑在一起。

如果您试图理解面向对象设计和非面向对象设计之间的区别,那么区分简单数据和属于类的一部分的数据是很有用的。在C语言中,数据是惰性的。单个变量或结构只是信息的容器。您可以将函数与该数据关联起来,也可以采用处理该数据的约定,但是这种关联和约定必须通过语言之外的某种协议来实施。在像c++这样的面向对象语言中,方法可以是对象的一部分。可以在对象、方法和字段级别定义数据访问。继承作为一种语言特性被支持。

进入技术细节:

类与数据类型大致相同。变量大致等同于对象。类是事物的抽象表示。它是一种描述,而不是事物本身。正如其他人所说,术语"对象"可能具有歧义性——既指一个类,也指该类的实例。更确切地说,对象(或类)的实例是变量。

类和数据类型是一回事。把它们想象成房子的蓝图。物体是根据这些蓝图建造的房子。变量是一个地址标签,它指向根据蓝图建造的房子。指针与变量是一样的,它只是一种定位已建房屋的方法,因此可以对其进行修改。