stack.h
:
struct customer
{
char fullname[35];
double payment;
};
typedef customer Item;
class Stack
{
private:
...
Item items[MAX];
public:
...
bool push(const Item & item);
bool pop(Item & item);
};
main.cpp
:
#include "stack.h"
...
int main()
{
Stack s; double total;
while (1)
{
...
cin >> c;
switch (c)
{
case '1': push(s);
break;
case '2': pop(s, total);
break;
...
}
}
...
}
void push(Stack & s)
{
Item newitem;
cout << "name -- "; cin >> newitem.fullname;
cout << "payment -- "; cin >> newitem.payment;
s.push(newitem);
}
void pop(Stack & s, double & total)
{
Item olditem;
s.pop(olditem);
total += olditem.payment;
}
Большинство main()
вероятно не имеет значения, но я просто хочу показать, что я делаю. push()
а также pop()
являются важными блоками.
Код выше должен заполнить стек Item
s. Когда Item
выскочил, его payment
добавлен к бегу total
,
Кроме того, различать Stack
методы pop()
а также push()
с функциями в main()
,
Код работает именно так, как я хочу, но я не понимаю, почему …
Я создаю местный Item
в push()
функция. На него ссылаются и помещают на Stack
, Тем не менее, когда push()
функция заканчивается, не должен ли этот местный Item
быть удален, так как он находится на автоматическом хранении? Тем не менее, как-то это все еще существует, потому что, когда я звоню pop()
вот оно.
Выражение items[top] = item
использует копия оператор присваивания для копирования структуры.
Других решений пока нет …