4.4 什么是对象

我们已经看到了一个最初的例子,现在回过头来看一些术语。把函数放进结构中是从C到C++中的根本改变,这引起我们将结构作为新概念去思考。在C中,struct是数据的凝聚,它将数据捆绑在一起,使得我们可以将它们看做一个包。但这除了能使编程方便之外,别无其他。对这些结构进行操作的函数可以在别处。然而将函数也放在这个包内,结构就变成了新的创造物了,它既能描写属性(就像Cstruct能做的一样),又能描述行为,这就形成了对象的概念。对象是一个独立的捆绑的实体,有自己的记忆和活动。

在C++中,对象就是变量,它的最纯正的定义是“一块存储区”(更明确的说法是,“对象必须有惟一的标识”,在C++中是一个惟一的地址)。它是一块空间,在这里能存放数据,而且还隐含着有对这些数据进行处理的操作。

不幸的是,对于各种语言,当涉及这些术语时,并不完全一致,尽管它们是可以接受的。我们有时还会遇到关于面向对象语言是什么的争论,虽然到目前为止看起来已经相当调和了。有一些语言是基于对象的(object-based),意味着它们有像C++的结构加函数这样的对象,正如已经看到的。然而,这只是到达面向对象语言历程中的一部分,停留在把函数捆绑在数据结构内部的语言是基于对象的,而不是面向对象的。