一个对象可以被看作一个变量吗?
Can an object be considered as a variable?
我在区分类、对象、变量和数据类型方面遇到了一些麻烦。
类可以被视为数据类型吗?一个对象可以被看作一个变量吗?
还有,技术上的区别是什么?
这些术语有两种不同的用法:
-
休闲用途:
- 类:带有方法和字段的抽象数据类型
- 对象:类的实例。
- 变量:某些存储块的语言级名称(即:程序员给出的名称)。
- 数据类型:变量(或一些未命名的存储块)可以拥有的类型。
-
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;
。
"对象"这个词可以被认为是模棱两可的——大多数时候,当人们使用"对象"这个词时,他们指的是"某些class
或struct
的实例"。有时用来指代类。这可能会令人困惑,但随着您熟悉这些术语,就会变得更清楚。
*当我说"通常"时,我的意思是-通常在使用c++的过程中,您将遇到的所有代码都会以某种方式使用类来表示数据。然而,在极少数情况下,有些人会想到创建一个纯静态接口的类——没有数据。在他们的辉煌时刻,他们决定将构造函数设为私有,不允许实例化(创建所谓的"单例")。我从来没有把它们称为类型,或者听别人把它们称为类型。我很高兴在这一点上得到纠正,但现在,这就是我的立场。
是的,您可以将类视为数据类型,也可以将类的实例视为变量。
但是一个类可以不仅仅是一个数据类型——它支持将方法与数据捆绑在一起。
如果您试图理解面向对象设计和非面向对象设计之间的区别,那么区分简单数据和属于类的一部分的数据是很有用的。在C语言中,数据是惰性的。单个变量或结构只是信息的容器。您可以将函数与该数据关联起来,也可以采用处理该数据的约定,但是这种关联和约定必须通过语言之外的某种协议来实施。在像c++这样的面向对象语言中,方法可以是对象的一部分。可以在对象、方法和字段级别定义数据访问。继承作为一种语言特性被支持。
进入技术细节:
类与数据类型大致相同。变量大致等同于对象。类是事物的抽象表示。它是一种描述,而不是事物本身。正如其他人所说,术语"对象"可能具有歧义性——既指一个类,也指该类的实例。更确切地说,对象(或类)的实例是变量。
类和数据类型是一回事。把它们想象成房子的蓝图。物体是根据这些蓝图建造的房子。变量是一个地址标签,它指向根据蓝图建造的房子。指针与变量是一样的,它只是一种定位已建房屋的方法,因此可以对其进行修改。
- 用C++中的一个变量定义一个常量
- 一个变量的输入值也会保存到另一个变量中
- 将双精度变量设置为另一个变量的值
- 对具有相同方法的不同类使用一个变量
- 为什么一个变量获得与另一个值相同的值
- 尝试在 C++ 中为 ifstream 提供一个变量
- 类中的一个变量显示,但另一个不显示
- 声明一个变量,该变量在 c++ 或 c 中具有值,当程序终止时不会被销毁
- c++问题:给一个变量赋值后,另一个变量发生了变化
- 如何将一个变量用于父类和派生类
- 如何在循环中使用scanf,将值存储到一个变量中,然后打印出来?
- 我如何将一个变量与另一个变量进行比较,例如我想如果(var1 > var2 x 1),然后执行此 c++
- 如何在一个函数中定义一个变量,并在另一个函数中访问和更改它?(C++)
- 如果一个变量在它之前释放了另一个(相同的数据类型)变量,如何将其分配给内存?
- 迭代器或反向器的一个变量
- fstream库,试图创建一个变量名为(c++)的文件
- 如何在 c++ 中将两个不同类型的变量分配给一个变量
- 如何将一些变量放在一个变量中?
- 将 int 转换为字符串,然后连接另一个变量以创建完整扩展名,然后将其转换为 const_char*
- 如何用索引命名一个变量来存储输入 mxArray?