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;

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(account))

{

auto* tmp = (SavingsAccount*)account;

tmp->credit(tmp->calculateInterest());

}

cout

getBalance()

}

}

Resposta

Vê o desenvolvimento