コード
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()
それでも、私が呼び出すと、そこにあるので、どういうわけかまだ存在しています。