到目前为止,我们所编写的程序都没有使用到任何C++的面向对象的能力。也就是说,前面写的程序都是结构化的程序,不是面向对象的程序。编写面向对象的程序就需要用到类。类是C++封装的基本单位。类是用来创建对象的。类和对象是C++的基础。本书的后面篇章将全部用来讨论类和对象。
类的基础知识
我们先从术语类和对象开始学习。类是一种定义了对象通用形式的模板。类中明确定义了数据和代码。C++中使用类的详细说明来创建对象的。对象是类的实例。因此,类实际上是创建对象的工厂。有一点必须明确:类是逻辑上的抽象。只有当类的对象被创建了,内存中才会有该类的一个物理表示。
当定义类的时候,需要声明类中含有的数据以及作用于这些数据上的代码。一些简单的类可以只含有数据或者代码,但实际应用中的类通常都是既含有数据又含有函数代码的。
必备技能8.1:类的通用形式
类的创建是通过使用关键字class来完成的。用于声明类的通用形式如下:
class 类名称
{
私有数据和函数
public:
共有数据和函数
}对象列表;
其中的类名称就是这个类的名称。这个名称将变成一种新的类型的名称,可用于创建类的对象。我们也可以在类声明后面的对象列表中直接创建类的对象,这是可选的。一旦声明了一个类以后,我们就可以在需要的时候创建这个类的对象了。
类中可以含有私有的或者是共有的成员。缺省情况下,类中的成员都是私有的。这就意味着,这些成员只能被类的其它成员访问,而程序的别的部分是不能访问这些成员的。这是一种获得封装的方式——通过私有成员的方式可以严格控制对某些特性项的访问。
为了使得类的成员是公有的(也就是说,程序的其它部分可以访问它),我们必须把这些程序声明在public关键字之后。所有声明在public关键字之后的变量或者函数都是程序其它部分可以访问的。典型的情况就是通过共有的函数来访问私有的成员。注意,public关键字之后必须跟一个分号。
尽管句法上没有规定,但是一个设计得体的类仅定义一个逻辑实体。例如,一个用于存储姓名和电话号码的类通常是不需要存储股票行情,平均降雨量,太远黑子周期或者别的不相关的信息的。这里想要说的是:设计得当的类是把逻辑上相关的信息归为一组的。把其它不相关的信息也放入的这个类中将会使得你的程序结构非常混乱。
让我们复习一下:类创建了一种新的数据类型,我们可以用它来创建对象。
另外,类创建了用于定义其成员间关系的逻辑框架。当我们声明一个类的变量的时候,我们创建的就是一个类的对象。对象是有实际物理空间的,它是类的实例。也就是说,对象是占用存储空间的,而类型定义是不占用存储空间的。