第2章到第5章设计了电梯模拟程序,第6章开始了电梯模拟程序的编程。第7章中介绍了实现可投入使用的完整电梯模拟程序所需的其他技术,包括动态对象管理技术,用new和delete生成和删除模拟程序执行时所需的对象。我们还介绍了复合,从而可以在一个类中包含其他类对象成员。
通过复合可以建立大楼类,包含电梯和层,并可建立电梯类,包含按钮、门和电铃。
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指针