C++ Primer PLus 第十章 对象和类
编程练习第五题
5.考虑下面的结构声明:
struct customer {
char fullname[35];
double payment;
};
编写一个程序,它从栈中添加和删除customer结构(栈用Stack类声明表示)。每次customer结构被删除时,其payment的值被加入到总数中,并报告总数。注意:应该可以直接使用Stack类而不作修改;只修改typedef声明,使Item的类型为customer,而不是unsigned long即可。
栈是一种后进先出的抽象数据类型
这里用整型int栈顶“指针”指向栈的下一个空位置,如数组存储了一个数据在arr[0],然后“指针”+1指向第二个位置arr【1】,以此类推,直到超出了数组范围,表示栈已满。
int top=0; //栈顶“指针”,显示当前栈为空
top++; //指向下一个数组位置
Stack类的数据成员和函数成员声明文件
#ifndef STACK_H_ //防止头文件被重复引用并编译
#define STACK_H_
struct customer {
/*结构customer声明*/
char fullname[35]=""; /*数组初始化设值,变量payment初始化设值*/
double payment=0.0;
};
typedef customer Item; //设置customer别名Item
class Stack //Stack类声明
{
private:
enum{
MAX=10}; //通过枚举的方法可以设置在该类中使用的常量MAX=10
Item stack[MAX]; //栈,容量为10,存储的类型为结构customer
int top; //栈顶“指针”,指示栈顶
public:
Stack(); //Stack类默认构造函数
~Stack() {
}; //析构函数
bool isempty()const; //判断栈是否为空,也就是top是否为0
bool isfull()const; //判断栈是否已满,也就是top是否为10
bool push(const Item&item); //入栈,压入数据,压入后,栈顶“指针”+1
bool