为什么堆栈中的值不会更新,即使它是引用

时间:2013-03-20 18:35:23

标签: c++

我有以下结构和类定义,我遇到了问题:

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;
    }
};

我在main中运行以下代码:

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?我将push构造函数指定为:void push(customer &c)。代码的输出是:

10
Cash status: $3
Cash status: $5

当我将c2.payment更新为10时,是否应更新堆栈中的值?

2 个答案:

答案 0 :(得分:1)

您通过引用传递参数,但下面的分配是将引用的对象复制到堆栈中。

  

堆[顶++] = C;

这是使用隐式生成的赋值运算符,它复制客户类的每个成员。

答案 1 :(得分:0)

在将c2的值添加到堆栈之前,需要更改它的值。