3.8 类型和对象

2013-10-07 12:56:35 · 作者: · 浏览: 69

3.8 类型和对象

类型的概念是C++(www.cppentry.com)和大多数编程(www.cppentry.com)语言的核心。让我们以更紧密和稍微带有技术性的观点来看待类型, 特别是我们在计算过程中用来存储数据的对象类型。它将会在长时间运行时节省时间, 它也可能避免引起你的混淆。

类型定义一组可能的值与一组操作(对于一个对象)。

对象是用来保存一个指定类型值的一些内存单元。

值是被解释为一个类型的内存中的一组比特。

变量是一个命名过的对象。

声明是命名一个对象的一条语句。

定义是为一个对象分配内存空间的声明。

我们可以非正式地将一个对象看做一个盒子, 我们可以将指定类型的值放入这个盒子。一个int盒子可以保存整数, 例如7、 42与-399。一个string盒子可以保存字符串值, 例如"Interoperability"、 "tokens: !@#$%^&*"与"Old McDonald had a farm"。我们可以生动地将它想象为:

 

由于string要跟踪它保存的字符数, 因此string比int的表示方法更复杂。注意, 一个double保存一个数字, 而一个string保存多个字符。例如, x保存数字1.2, 而s2保存三个字符′1′、 ′.′与′2′。字符的单引号和字符串常量并不保存。

每个int的大小是相同的。也就是说, 编译器为每个int分配相同的固定大小的内存。在一个典型的台式电脑中, 这个大小是4个字节(32个比特)。与此类似, bool、 char与double是固定大小的。在通常情况下, 你会发现台式电脑为一个bool或一个char分配1个字节(8个比特), 为一个double分配8个字节。注意, 不同类型的对象使用不同大小的空间。特别地, 一个char比一个int占用更少的空间, string不同于double、 int与char, 不同大小的字符串占用不同大小的空间。

在内存中比特的含义完全依赖于访问它时所用的类型。我们这样考虑: 计算机内存不知道我们的类型, 只是将它保存起来。只有当我们决定内存如何解释时, 在内存中的比特才有意义。这个过程与我们每天使用数字相似。12.5的含义是什么?我们并不知道。它可以是$12.5、 12.5cm或12.5gallons。只有当我们使用单位时, 才会定义12.5的含义。

例如, 当值120表示的是一个int, 而值′x′表示的是一个char时, 它们在内存中的比特值相同。如果我们将它看成一个string, 它将不会有意义, 并在我们试图使用它时出现运行错误。我们可以像下面这样生动地解释它, 使用1和0表示内存中的比特值:

 

这是一个内存区域(一个字)中的一组比特, 它们可以被读取为一个int(120)或一个char(′x′, 只看最右侧的8个比特)。一个比特是计算机中的一个内存单元, 它可以保存一个值0或1。想理解二进制数的含义, 见A.2.1.1节。