Programa bancário polimórfico usando a hierarquia Conta. Desenvolva um programa bancário polimórfico usando a hierarquia Conta criada no Exercício 20.10. Crie um vetor de ponteiros Conta para objetos ContaPoupança e ContaCorrente. Para cada Conta no vector, permita que o usuário especifique um valor a ser sacado da Conta usando a função-membro debitar e um valor a ser depositado na Conta usando a função-membro creditar. Ao processar cada Conta, determine seu tipo. Se uma Conta for uma ContaPoupança, calcule o valor dos juros devidos à Conta usando a função-membro calculaJuros, depois some os juros ao saldo da conta usando a função-membro creditar. Depois de processar uma Conta, imprima o saldo atualizado da conta, obtido chamando a função-membro da classe-base retSaldo.
Passo 1
Introdução
Usaremos as classes criadas no exercício 20.10 para usá-las polimorficamente dentro de um vetor de ponteiros conta.
Modificações
Antes de podermos usar polimorficamente a classe Account, temos que torná-la polimórfica.
Para fazer isso, temos que definir uma função virtual. Defina as funções credit() e debit() virtuais.
#ifndef H_ACCOUNT_H
#define H_ACCOUNT_H
class Account {
public:
explicit Account(double balance);
virtual void credit(double amount);
virtual bool debit(double amount);
double getBalance() const;
private:
double balance;
};
#endif
Passo 2
Além disso, adicionaremos alguns valores padrão aos construtores das classes derivadas.
#ifndef H_CHECKINGACCOUNT_H
#define H_CHECKINGACCOUNT_H
#include "Account.h"
class CheckingAccount : public Account {
public:
CheckingAccount(double balance = 100,
double feePerTransaction = 0.5);
void credit(double amount);
bool debit(double amount);
private:
double feePerTransaction;
};
#endif
#ifndef H_SAVINGSACCOUNT_H
#define H_SAVINGSACCOUNT_H
#include "Account.h"
class SavingsAccount : public Account {
public:
SavingsAccount(double balance = 100,
double interestRate = 0.01);
double calculateInterest() const;
private:
double interestRate;
};
#endif
Passo 3
Principal
O cabeçalho do arquivo:
#include
#include
#include "Conta Poupança.h"
#include "ContaConta.h"
usando o namespace std;
...
Passo 4
Agora, declare um vetor de ponteiros Account e coloque alguns objetos nele:
int main()
{
vector
accounts.push_back(new SavingsAccount);
accounts.push_back(new CheckingAccount);
accounts.push_back(new SavingsAccount);
...
}
Em seguida, itere pelo vetor, solicitando que o usuário escolha a opção de depósito ou saque e insira o valor:
int main()
{
...
for (auto & account : accounts)
{
cout
> ";
int choice, amount;
cin >> choice;
cout > ";
cin >> amount;
if (choice == 1)
account->credit(amount);
else if (choice == 2)
account->debit(amount);
else
cout
...
}
}
Por fim, verificando o valor de retorno da conversão dinâmica da conta para SavingsAccount, veja se a conta é dessa classe.
Se for, adicione os juros ao saldo da conta.
Por fim, imprima o saldo da conta:
int main()
{
...
for (auto & account : accounts)
{
...
if (dynamic_cast
{
auto* tmp = (SavingsAccount*)account;
tmp->credit(tmp->calculateInterest());
}
cout
getBalance()
}
}
Resposta
Vê o desenvolvimento