C ++ Проблема передачи объекта между классами - PullRequest
0 голосов
/ 18 марта 2012

Я уверен, что пропускаю что-то очень простое. Если бы кто-нибудь мог предложить какую-то помощь или указать мне соответствующую тему, я был бы чрезвычайно благодарен. Кроме того, если вам понадобится больше моего кода, я с радостью предоставлю его.

У меня есть простая программа банковского счета. В классе main () у меня есть следующая функция:

void deposit(const Bank bank, ofstream &outfile)
{
    int requested_account, index;
    double amount_to_deposit;
    const Account *account;

    cout << endl << "Enter the account number: ";           //prompt for account number
    cin >> requested_account;

    index = findAccount(bank, requested_account);
    if (index == -1)                                        //invalid account
    {
        outfile << endl << "Transaction Requested: Deposit" << endl;
        outfile << "Error: Account number " << requested_account << " does not exist" << endl;
    }
    else                                                    //valid account
    {
        cout << "Enter amount to deposit: ";                //prompt for amount to deposit
        cin >> amount_to_deposit;

        if (amount_to_deposit <= 0.00)                      //invalid amount to deposit
        {
            outfile << endl << "Transaction Requested: Deposit" << endl;
            outfile << "Account Number: " << requested_account << endl;
            outfile << "Error: " << amount_to_deposit << " is an invalid amount" << endl;
        }
        else                                                //valid deposit
        {
            outfile << endl << "Transaction Requested: Deposit" << endl;
            outfile << "Account Number: " << requested_account << endl;
            outfile << "Old Balance: $" << bank.getAccount(index).getAccountBalance() << endl;
            outfile << "Amount to Deposit: $" << amount_to_deposit << endl;
            bank.getAccount(index).makeDeposit(&amount_to_deposit);      //make the deposit
            outfile << "New Balance: $" << bank.getAccount(index).getAccountBalance() << endl;
        }
    }
    return;
} // close deposit()

Проблема связана с makeDeposit (& amount_to_deposit). Выходной файл показывает:

Transaction Requested: Deposit
Account Number: 1234
Old Balance: $1000.00
Amount to Deposit: $168.00
New Balance: $1000.00

В классе Account есть функция makeDeposit:

void Account::makeDeposit(double *deposit)
{
    cout << "Account balance: " << accountBalance << endl;
    accountBalance += (*deposit);
    cout << "Running makeDeposit of " << *deposit << endl;
    cout << "Account balance: " << accountBalance << endl;
    return;
}

Вывод консоли из вызовов cout:

Enter the account number: 1234
Enter amount to deposit: 169
Account balance: 1000
Running makeDeposit of 169
Account balance: 1169

Итак, внутри функции makeDeposit () она корректно обновляет переменную accountBalance. Но как только функция заканчивается, она возвращается к исходному значению.

Я уверен, что это элементарно для более опытных программистов. Ваше понимание будет очень цениться.

Спасибо, Адам

1 Ответ

3 голосов
/ 18 марта 2012

Это потому, что вы передаете банк по значению не по ссылке, а по конст.Изменение

void deposit(const Bank bank, ofstream &outfile)

на

void deposit(Bank& bank, ofstream &outfile)

должно исправить это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...