-1

コード

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

4

1 に答える 1

2

この式items[top] = itemは、コピー代入演算子を使用して構造をコピーします。

于 2016-10-08T19:55:40.527 に答える