3.2.5 代码分析
Stack类封装了六个高层公有成员函数,构成了它的接口:
init成员函数初始化私有数据成员top以确保push和pop操作的正确性。该成员函数是Stack创建后应该首先调用的成员函数;如果对一个非空Stack调用init,会清空该Stack。在3.5节中,我们将讨论如何实现创建Stack时自动调用某个成员函数(如init)的功能,不过在这个版本的Stack中,调用init是客户的责任。
push成员函数将一个新的整数插入到top。为确保Stack的健壮性,应首先检查Stack是否已满,如果Stack已满,则不执行插入操作。
pop成员函数移出top的整数。为确保Stack的健壮性,应首先检查Stack是否为空,如果为空,pop成员函数不移动元素并返回任意整数值。
isFull成员函数检查Stack是否已满。push成员函数调用isFull函数来判断Stack是否还有空间可供插入。如果Stack已满,则push在退出之前打印一条错误信息;如果没满,则push将待插整数插入到top。
isEmpty成员函数检查Stack是否为空。pop成员函数调用isEmpty函数来判断Stack是否为空。如果Stack为空,则pop返回任意值;如果Stack非空,则pop返回top的元素。
dump成员函数按照从Stack顶端到底端的次序,依次将Stack的内容输出到标准输出。dump成员函数不移出任何元素。
Stack类也封装了一些私有成员:一个私有的整型数组和一个私有整型变量top作为数组的索引,整型数组最多能够容纳的元素个数为MaxStack。我们将MaxStack设计为一个枚举值,并将它放到Stack类的公有部分,这样,只要Stack可见,则MaxStack可见。通过使用域解析符Stack::MaxStack,便可对MaxStack进行访问。Stack类的实现部分还包含了私有成员函数errMsg,该函数用于将错误信息输出到标准输出。当执行push操作而Stack已满或执行pop操作而Stack已空的时候,push成员函数和pop成员函数分别使用errMsg成员函数来输出错误信息。私有数据成员和私有成员函数将Stack类的实现细节对Stack的客户隐藏起来,正是这些实现细节确保了Stack类接口中各函数运行的正确性。由于我们想将Stack类设计为抽象数据类型,因此,我们将这些成员定义为私有成员以隐藏Stack类的实现细节。