无法更新对象的属性?

时间:2015-05-14 06:38:20

标签: c++ pointers methods

我有一个名为Update Account的虚方法,根据从find方法找到的指针返回main,帐户将相应更新。

有一个名为Account的父类,其中Savings派生自。

但是,节省的费用不会产生更新的利息,也不会使利息生效。

所有帐户都有余额,存款不会在帐户之间发生变化,这就是我调用帐户存款方式的原因

void Savings::UpdateAccount(Date *date)
{
     int   interestMonths;
     short lastYear;
     short lastMonth;
     float currBal;

     //THESE GET THE CURRENT DATE - Differs from the account creation
     //date and allows for the calculation of interest

     lastMonth = GetAccountMonth();
     lastYear  = GetAccountYear();
     currBal   =  GetAccountBal();

        if (((date -> GetYear ( ) - lastYear) * 12 +
           (date -> GetMonth ( ) - lastMonth )) > 0)
        {
            interestMonths = ((date -> GetYear ( ) - lastYear) * 12 +
                             (date -> GetMonth ( ) - lastMonth));

            for (int index = 0; index < interestMonths; index++)
            {
                currBal = currBal + (currBal * interestRate);
            }

           //This method takes the calculated current balance, then
           //passes it into the parent class method to update the 
           //private accountBal attribute. 

           SetBalance(currBal);
        }
}

问题是这种方法没有更新对象的余额,我相当确定我的利率计算不是问题。

感谢您的帮助 - 此方法现在有效。

1 个答案:

答案 0 :(得分:2)

您正在更新 余额,但帐号错误。

void Savings::UpdateAccount(Date *date)const
{
     int   interestMonths;
     short lastYear;
     short lastMonth;
     float currBal;
     Account myAccount;

此处,myAccount是一个局部变量,与您刚找到的帐户无关(this)...

 myAccount.SetBalance(currBal);

...这是您正在更新的帐户的余额。

你想修改你正在调用函数的对象,所以只需说

SetBalance(currBal);

并从函数中删除const - 您不能拥有更新帐户但不修改帐户的功能。

您也不需要在Savings成员的定义中添加“Savings ::” -

 lastMonth = GetAccountMonth();
 lastYear = GetAccountYear();
 currBal = GetAccountBal();

应该可以正常工作。