Почему эта структура автоматического хранения все еще существует?

Код

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() являются важными блоками.

Код выше должен заполнить стек Items. Когда Item выскочил, его payment добавлен к бегу total,

Кроме того, различать Stack методы pop() а также push() с функциями в main(),


дилемма

Код работает именно так, как я хочу, но я не понимаю, почему …

Я создаю местный Item в push() функция. На него ссылаются и помещают на Stack, Тем не менее, когда push() функция заканчивается, не должен ли этот местный Item быть удален, так как он находится на автоматическом хранении? Тем не менее, как-то это все еще существует, потому что, когда я звоню pop()вот оно.

-1

Решение

Выражение items[top] = item использует копия оператор присваивания для копирования структуры.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]