调用方法不会更改值,除非从方法本身

时间:2012-06-16 14:22:13

标签: c++ pointers reference

我想弄清楚我的错误。

我正在使用C ++中的Account类,其中有一些方法,例如credit()debit()等。
我写了一个transfer()方法,我得到的问题是它从帐号a1中取出“钱”但不归功于a2。但是,如果我在account.cpp中的方法本身中打印它,它确实显示正确的结果,而在main中,余额保持不变。

你能看出我的错误吗?与参考,指针等有关吗?
这是主要的:

a1.println(); 
a2.println();
cout<< "Valid parameter " << endl;
cout<< a1.transfer(a2, 13) << endl;
a1.println();
a2.println();

以下是它的印刷品:

(Account(65,140))
(Account(130,100))
Valid parameter 
1
(Account(65,127))
(Account(130,100))

以下是方法的定义:

    // withdraw money from account
    bool Account::debit(int amount){
    if (amount>=0 && balance>=amount) {
        balance=balance-amount; // new balance
        return true;
    } else {
        return false;
    }
}


// deposit money
bool Account::credit(int amount){
    if (amount>=0) {
        balance=balance+amount; // new balance
        return true;
    } else {
        return false;
    }
}

bool Account::transfer(Account other, int amount){
    if (amount>=0 && balance>=amount) {
        debit(amount);
        other.credit(amount);
        //other.println();// prints corect amount
        return true;
    } else {
        return false;
    }
}

2 个答案:

答案 0 :(得分:7)

这是因为您按值传递了其他Account。天平变为OK,但是在帐户的不同实例上,意味着副本被修改,而原始文件保持不变。

将您的代码更改为通过引用传递Account以使其正常工作。

bool Account::transfer(Account& other, int amount)
//                            ^
//                           HERE

答案 1 :(得分:1)

您没有通过引用传递“其他”

 bool Account::transfer(Account& other, int amount){