我需要帮助上课。 (C ++)

时间:2011-03-13 04:15:28

标签: c++ class

好吧,我正在尝试在我的编程书中练习,而且我很难准确掌握它想要的内容。

我的“enterAccountData()”函数假设要求用户提供一个帐号和余额,两者都不能为负数且帐号不能小于1000

第二个是我坚持使用“computeInterest()”的函数。假设函数接受一个整数参数,该参数表示帐户将获得利息的年数。然后,该功能显示上一个功能的帐号,并根据附加到BankAccount类的利率显示每年年底的结余余额。 (“BankAccount”的利率必须是一个恒定的静态字段,设置为3%(0.03))。

所以我的问题是:当我的调试器不允许我将字段保持为常量时,如何设置“computeInterest()”也允许它使用常量静态字段计算兴趣?我现在并没有试图阻止任何随机错误的发生,只是试图得到这本书正是要求的内容。这是我的代码。

#include <iostream>
#include <iomanip>

using namespace std;

class BankAccount
{
  private:
    int accountNum;
    double accountBal;
    static double annualIntRate;
  public:
    void enterAccountData(int, double);
    void computeInterest();
    void displayAccount();
};

//implementation section:
double BankAccount::annualIntRate = 0.03;
void BankAccount::enterAccountData(int number, double balance)
{
    cout << setprecision(2) << fixed;
    accountNum = number;
    accountBal = balance;

    cout << "Enter the account number " << endl;
    cin >> number;

    while(number < 0 || number < 999)
    {
        cout << "Account numbers cannot be negative or less than 1000 " <<
                "Enter a new account number: " << endl;
        cin >> number;
    }

    cout << "Enter the account balance " << endl;
    cin >> balance;

    while(balance < 0)
    {
        cout << "Account balances cannot be negative. " <<
                "Enter a new account balance: " << endl;
        cin >> balance;
    }
    return;
}
void BankAccount::computeInterest()
{
    const int MONTHS_IN_YEAR = 12;
    int months;
    double rate = 0; 
    int counter = 0;
    BankAccount::annualIntRate = rate;

    cout << "How many months will the account be held for? ";
    cin >> months;
    counter = 0;
    do
    {
        balance = accountBal * rate + accountBal;
        counter++;
    }while(months < counter);
    cout << "Balance is:$" << accountBal << endl;
}

int main()
{
    const int QUIT = 0;
    const int MAX_ACCOUNTS = 10;
    int counter;
    int input;
    int number = 0;
    double balance = 0;

    BankAccount accounts[MAX_ACCOUNTS];
    //BankAccount display;

    counter = 0;

    do
    {

        accounts[counter].enterAccountData(number, balance);
        cout << " Enter " << QUIT << " to stop, or press 1 to proceed.";
        cin >> input;
        counter++;
    }while(input != QUIT && counter != 10);

    accounts[counter].computeInterest();

    system("pause");
    return 0;
}

2 个答案:

答案 0 :(得分:2)

常量字段很容易:

class BankAccount
{
  ...
  const static double annualIntRate = 0.03;
  ...
}

(你的调试器是否抱怨过?我正在使用gcc 4.2.1)但是代码中还有其他令人不安的问题,比如computeInterest尝试将rate设置为零的方式,以及while循环...需要工作。

修改:
一个好的原则值得一百个特定的修正。当你开发一个复杂的功能时,不要试图一次完成所有操作;从一个简单的部分开始,让它完美地工作,然后建立起来。实例,computeInterest。你有几个独立的部分可以工作:通过while循环正确的次数,计算利息增量,跟踪余额 - 现在computeInterest没有正确地做这些。一次一个地处理它们,或者如果你想要并行处理它们,但是从不组合那些不起作用的部分。

答案 1 :(得分:1)

自从我在C ++工作以来,这是一段很长的时间,但我认为你所要做的就是:

static double annualIntRate =.03;

在您的代码的“私人”部分。

然后你可以使用annualIntRate,就像它是一个全局的(对于每个类的实例)变量。