Как этот частный элемент данных базового класса доступен производному классу? - PullRequest
0 голосов
/ 01 мая 2011

У меня есть личный элемент данных с именем balance в базовом классе, который называется bankAccount. Я хотел, чтобы мой производный класс CheckAccount мог использовать баланс, поэтому я сделал его защищенным, но я заметил, что мой производный класс, по-видимому, все еще имеет доступ к балансу, даже если он помещен в закрытый раздел моего базового класса. Я думал, что это невозможно? Кто-нибудь знает, что будет дальше?

Базовый класс:

class bankAccount
    {
        public:
        bankAccount();
        void setAccountInfo(int accountNumTemp, double balanceTemp);
        void applyTransaction(char accountType, char transactionTypeTemp, int amountTemp, int j);

        private:
        int accountNumber;
        double balance;
    };

Производный класс:

class checkingAccount: public bankAccount
{
    public:
    checkingAccount();
    double applyTransaction(char transactionTypeTemp, int amountTemp, int c, double balance);

    private:
    float interestRate;
    int minimumBalance;
    float serviceCharge;

};

член функции базового класса, где член функции производного класса получает рассматриваемый элемент данных:

void bankAccount:: applyTransaction(char accountType, char transactionTypeTemp, int amountTemp, int j)
{
    int c;
    c = j;

    checkingAccount ca;

            balance = ca.applyTransaction(transactionTypeTemp, amountTemp, c, balance);
}

Член функции производного класса, в котором используется закрытый член данных базового класса:

double checkingAccount:: applyTransaction(char transactionTypeTemp, int amountTemp, int c, double balance)
{
  if (transactionTypeTemp == 'D')
        {
            balance = balance + amountTemp;
        }
  else if (transactionTypeTemp == 'W')
        {
            if (balance < amountTemp)
            {
            cout << "error: transaction number " << c + 1 << " never occured due to insufficent funds." << endl;
            }
            else
            {
                balance = balance - amountTemp;
                if(balance < minimumBalance) //if last transaction brought the balance below minimum balance
                {
                   balance = (balance - serviceCharge); //apply service charge
                }
            }
        }

        return balance;
}

Ответы [ 2 ]

2 голосов
/ 01 мая 2011

checkingAccount::applyTransaction не видит или не касается члена balance базового класса.Он использует, сбрасывает и возвращает свой собственный аргумент balance.

2 голосов
/ 01 мая 2011

balance в этом контексте является четвертым аргументом функции (checkingAccount:: applyTransaction);это не элемент данных bankAccount.

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