1

私は自分の間違いを理解しようとしています。

私はC++でクラスに取り組んでおり 、、などのAccountメソッドがいくつかあります。メソッドを作成しましたが、「お金」を考慮に入れていないのにクレジットが表示されないという問題が発生します。ただし、account.cppのメソッド自体に出​​力すると、正しい結果が表示されますが、メインではバランスは同じままです。credit()debit()
transfer()a1a2

私の間違いが見えますか?参照、ポインタなどと何か関係がありますか?
ここにメインがあります:

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

2 に答える 2

7

これは、もう一方Accountを値で渡すためです。残高は正常に変更されますが、アカウントの別のインスタンスで、元のコピーはそのままで、コピーが変更されます。

コードを参照渡しに変更Accountして、機能させます。

bool Account::transfer(Account& other, int amount)
//                            ^
//                           HERE
于 2012-06-16T14:24:08.683 に答える
1

参照により「その他」を渡さなかった

 bool Account::transfer(Account& other, int amount){
于 2012-06-16T14:24:36.653 に答える