C++中的类
类是一种将抽象转换为用户定义类型的C++工具,它将数据表示和操纵数据的方法组合成一个整洁的包。
以一个股票的类为例。
将某人当前持有的某种股票作为一个基本单元,数据表示中包含他持有的股票数量。可以将可执行的操作限制为:
- 获得股票;
- 增持;
- 卖出股票;
- 更新股票价格;
- 显示关于所持股票的信息;
存储以下信息:
-
公司名称;
-
所持股票的数量;
-
每股的价格;
-
股票总值
一般来说,类规范由两个部分组成。 -
类声明:以数据成员的方式描述数据部分,以成员函数(方法)的方式描述公有接口。
-
类方法定义:描述如何实现类成员函数。
简单来说,类声明提供类的蓝图,方法定义提供了细节。
接口
接口是一个共享框架,供两个系统(用户或计算机程序之间)交互时使用;例如,移动鼠标时,计算机移动屏幕上的光标。程序接口将自己的意图转换为存储在计算机中的具体信息。
对于类,也就是公共接口。在这里公众是使用类的程序,,交互系统由类对象组成,接口由编写类的人提供的方法组成。接口让程序员能够编写与类对象交互的代码,从而让程序能够使用类对象。比如,size()
方法是用户和string
类对象直接的公共接口的组成部分。
要使用某个类,必须了解其公共接口;要编写类,必须创建其公共接口。
实现类成员函数
成员函数有两个特殊的特征:
- 定义成员函数时,使用作用域解析运算符(::)来表示函数所属的类;
- 类方法可以访问类的
private
组件;
比如在Stock
里面定义成员函数update()
的函数头如下:
void Stock::update(double price)
作用域解析运算符确定了方法定义对应的类的身份。
使用类
知道如何定义类及其方法后,来创建一个程序,它创建并使用类对象。C++的目标是使得使用类与使用基本的内置类型尽可能相同。要创建类对象,可以声明类变量,也可以使用new
为类对象分配存储空间。可以将对象作为函数的参数和返回值,也可以将一个对象赋给另一个对象。
客户/服务器模型
OOP程序员常依照客户/服务器模型来讨论程序设计。在这个概念中,客户是使用类的程序。类声明(包括类方法)构成了服务器,它是程序可以使用的资源。客户只能通过以共有方式定义的接口使用服务器,这意味着客户(程序员)唯一的责任是了解该接口。服务器(服务器设计人员)的责任是确保服务器根据该接口可靠并准确地执行。服务器设计人员只能去修改类设计的实现细节,而不能修改接口。这样程序员独立地对客户-服务器进行改进,对服务器的修改不会对客户的行为造成意外的影响。
总而言之,指定类设计的第一步是提供类声明。类声明类似结构声明,可以包括数据成员和函数成员。声明有私有部分,在其中声明的成员只能通过成员函数进行访问;声明还具有共有部分,在其中声明的成员可被使用类对象的程序直接访问。通常,数据成员被放在私有部分中,成员函数被放在共有部分中,因此典型的类声明的格式如下:
class className
{
private:
data member declarations
public:
member function prototypes
};
共有部分的内容构成了设计的抽象部分–公有接口。将数据封装到私有部分中可以保护数据的完整性,这被称为数据隐藏。因此,C++通过类是的实现抽象、数据隐藏和封装等OOP特性很容易。
指定类设计的第二部是实现类成员函数。可以在类声明中提供完整的函数定义,而不是函数原型,但是通常的做法是单独提供函数定义(除非函数很小)。在这种情况下,需要使用作用域解析运算符来指出成员函数属于哪个类。