我想弄清楚我的错误。
我正在使用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;
}
}
答案 0 :(得分:7)
这是因为您按值传递了其他Account
。天平变为OK,但是在帐户的不同实例上,意味着副本被修改,而原始文件保持不变。
将您的代码更改为通过引用传递Account
以使其正常工作。
bool Account::transfer(Account& other, int amount)
// ^
// HERE
答案 1 :(得分:1)
您没有通过引用传递“其他”
bool Account::transfer(Account& other, int amount){