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

Au *_*Ris 1 c++ pointers reference

我想弄清楚我的错误.

我正在使用AccountC++ 编写类,其中有一些方法,比如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();
Run Code Online (Sandbox Code Playgroud)

这是它打印的内容:

(Account(65,140))
(Account(130,100))
Valid parameter 
1
(Account(65,127))
(Account(130,100))
Run Code Online (Sandbox Code Playgroud)

以下是方法的定义:

    // 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

das*_*ght 7

这是因为你Account通过值传递另一个.天平变为OK,但是在帐户的不同实例上,意味着副本被修改,而原始文件保持不变.

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

bool Account::transfer(Account& other, int amount)
//                            ^
//                           HERE
Run Code Online (Sandbox Code Playgroud)