ITEEDU

7.11 有关对象的思考:在电梯模拟程序中使用复合和动态对象管理

第2章到第5章设计了电梯模拟程序,第6章开始了电梯模拟程序的编程。第7章中介绍了实现可投入使用的完整电梯模拟程序所需的其他技术,包括动态对象管理技术,用new和delete生成和删除模拟程序执行时所需的对象。我们还介绍了复合,从而可以在一个类中包含其他类对象成员。

通过复合可以建立大楼类,包含电梯和层,并可建立电梯类,包含按钮、门和电铃。

电梯实验室任务5

1.每当有另一个人进入时,用new生成新的Person对象,表示这个人。注意new调用所生成对

象的构造函数,这个构造函数应初始化该对象。每次有人离开时,用delete删除Person对象

并释放该对象占用的存储空间,delete调用所删除对象的析构函数。

2.枚举电梯模拟程序中所实现的类之间的复合关系。修改第6章“有关对象的思考”一节生成

的类定义,反映这种复合关系。

3. 完成模拟程序的实现工作。后面各章会建议如何改进模拟程序。

小 结

●关键字const指定的对象不能修改。

●C++编译器不允许任何非const成员函数调用const对象。

●试图通过类的const成员函数修改该类对象的数据成员是个语法错误。

●函数在原型和定义中指定为const。

●const成员函数可以用非const版本重载。编译器根据对象是否声明为const自动选择所用的重载版本。

●const对象应初始化。要用成员初始化值向构造函数提供类对象数据成员的初始值。

●类可以将其他类对象作为类成员。

●成员对象按声明的顺序在构造所在类对象之前构造。

●如果不提供成员初始化值.则隐含调用成员对象的默认构造函数。

●类的友元函数在类范围之外定义,但有权访问类的所有成员。

●友元关系声明可以放在类定义中的任何地方。

●this指针隐式引用对象的数据成员和成员函数。

●每个对象都可以通过this指针访问自己的地址。

●this指针也可以显式使用。

●Rew运算符自动生成正确长度的对象,调用对象构造函数和返回正确类型的指针。要在C++中释放这个对象的空间.需要使用delete运算符。

●对象数组可以用new动态分配,如下所示:

int *ptr = new int[100];

分配100个整数的数组并将数组开始位置指定为ptr。上述整数数组可以用下列语句删除:

delete[] Ptr;

●stati类变量表示整个类范围的信息。static类成员的声明以static关键字开始。

●static数据成员的作用域是类范围。

●类的public static类成员可以通过类的任何对象访问,也可以用二元作用域运算符通过类名访问。

●如果成员函数不访问非static类数据成员和成员函数,则可以声明为static。与非static成员函数不同的是,static成员函数没有this指针,因为static类数据成员和成员函数是独立于类对象而存在的。

●类通常对类的客户隐藏实现细节,这称为信息隐藏。

●堆栈是后进先出(LIFO)的数据结构,最后放进堆栈的项目最先从堆栈中取出。

●描述类的功能而不管其实现细节称为数据抽象,C++类定义所谓的抽象数据类型(ADT)。

●C++提高了数据的重要性。C++中的主要活动就是生成自己的新数据类型(即类)和表达这些数据类型之间的相互作用。

●抽象数据类型实际上是在计算机系统中一定程度地近似表示现实世界的概念。

●抽象数据类型实际上包含两个概念,即数据表达和该数据允许的操作。

●C++是可扩展的语言。尽管这个语言可以方便地用新类型扩展,但基础语言本身不能改变。

●C++是一种定义简练的语言,只向程序员提供了建立各种系统的原始功能。这种语言保证了最小编程负担。

●队列中的项目按先进先出(FIFO)顺序出队,第一个插入队列的项目第一个离开队列。

●容器类是保存一组对象集合的类。容器类通常提供插入、删除、查找、排序和测试类成员项目等操作。

●容器类经常与迭代对象(或简称迭代器)相关联。迭代对象返回集合中的下一个项目(或对集合中的下一个项目进行某种操作)。

●向客户提供代理类,代理类只能访问类的public接口,这样就可以让客户使用类的服务而不必让客户访问类的实现细节。

●代理类惟一的private成员是隐藏该类对象的private数据的指针。

●类定义只使用另—个类的指针时,另一个类的头文件(通常显示该类的private数据)不需要用#include包含在内。只要在文件中使用该类型之前用提前类声明将另外的这个类声明为一种数据类型即可。

●实现文件包含代理类成员函数,该文件包含隐藏该类private数据的头文件。

●实现文件以预编译对象文件形式和头文件一起提供给客户,该头文件包含代理类提供服务的函数原型。

术 语

abstract data type(ADT)   抽象数据类型             dequeue(queueoperation)  出队(队列操作)
  binary scope resolution operator(::)  二元作用域   destructor析构函数
             运算符                                  dynamic objects   动态对象
  cascading member function calls  连续使用成员      enqueue(queueoperation)  入队(队列操作)
      函数调用                                       extensiblelanguage可扩展语言
  class scope   类范围                               first-in-first-out(FIFO)   先进先出
  composition   复合                                 foward class declaration   提前类声明
  const member function    const成员函数             friend class   友元类
  const object     const对象                         friend function    友元函数
  constructor    构造函数                            host object    宿主对象
  container   容器                                   iterator   迭代界
  data representalions   数据表达                    last-in-first-out(LIFO)  后进先出
  default constructor   默认构造函数                 member selection operator(.)  成员选择运算符
  default destructor   默认析构函数                  member access specifiers   成员访问说明符
  delete operator    delete   运算符                 member initializer   成员初始化值
  delete[] operator  delete[]运算符                  member object   成员对象
 member object constructor 成员对象构造函数    principle of least privilege 最低权限原则
  new operator    new   运算符                       proxy class   代理类
  new[] operator    new[]运算符                      push(stack operation)  压入(堆栈操作)
  object-based progamming    基于对象编程           queue abstract data type   队列抽象数据类型
  operations in an ADT  ADT中的操作             stack abstract data type  堆栈抽象数据类型
  pointer member selection operator(->)  指针成      static datamember  静态数据成员
        员选择运算符                                 static member function   静态成员函数
  pop(stack operation)   弹出(堆栈操作)              this pointer    this指针