1

問題が発生している次の構造体とクラスの定義があります。

struct customer{
    string fullname;
    double payment;
};

class Stack{
private:
    int top;
    customer stack[10];
    bool full;
    double sum;
public:
    Stack(){ 
        top=0; 
        full=false;
        double sum=0.0;
    }

    bool isFull(){
        return full;
    }

    void push(customer &c){
        if(!full)
            stack[top++]=c;
        else
            cout << "Stack full!" << endl;
    }

    void pop(){
        if(top>0){
            sum+=stack[--top].payment;
            cout << "Cash status: $" << sum << endl;
        }
        else
            cout << "Stack empty!" << endl;
    }
};

私はメインで次のコードを実行します:

int main(){
    customer c1 = {"Herman", 2.0};
    customer c2 = {"Nisse", 3.0};
    Stack stack = Stack();
    stack.push(c1);
    stack.push(c2);
    c2.payment=10.0;
    cout << c2.payment << endl;
    stack.pop();
    stack.pop();
    return 0;
}

合計が12にならないのはなぜですか?プッシュコンストラクターを次のように指定しました:void push(customer &c)。コードからの出力は次のとおりです。

10
Cash status: $3
Cash status: $5

c2.paymentを10に更新するときに、スタックの値を更新する必要がありますか?

4

2 に答える 2

1

引数を参照で渡しますが、以下の割り当ては、参照されたオブジェクトをスタックにコピーしています。

stack [top ++] = c;

これは、顧客クラスの各メンバーをコピーする、暗黙的に生成された代入演算子を使用しています。

于 2013-03-20T18:43:04.487 に答える
0

スタックに追加する前に、c2の値を変更する必要があります。

于 2013-03-20T19:02:13.143 に答える