Neste vídeo taxaDeSaque foi criado como um método virtual que é sobrescrito nas classes derivadas. Mas esse método apenas retorna um valor.
Faria sentido que ao invés de um método virtual fosse usado um atributo protegido que é inicializado como 0.05 na ContaCorrente 0.03 na ContaPoupanca, ou nesse caso o ideal é usar um método virtual mesmo (e por que)?
// Conta.h
#include <string>
#include "TItular.h"
class Conta
{
private:
static int numeroDeContas;
public:
static int pegaNumeroContas();
protected:
std::string m_numero;
Titular m_titular;
float m_saldo;
float m_tarifa;
public:
Conta(std::string numero, Titular titular);
virtual ~Conta();
void sacar(float valor);
void depositar(float valor);
float pegaSaldo() const;
std::string pegaTitular() const;
};
// Conta.cpp
// ...
Conta::Conta(std::string numero, Titular titular):
m_numero(numero),
m_titular(titular),
m_saldo(0)
{
m_tarifa = 0.05;
numeroDeContas++;
}
// ...
// ContaCorrente.cpp
// ...
ContaCorrente::ContaCorrente(std::string numero, Titular titular) : Conta(numero, titular)
{
m_tarifa = 0.01;
}
// ...
Além disso, como esse valor não muda para as diferentes instâncias das classes ContaCorrente (ou para as diferentes instancias da ContaPoupanca), por que não podemos defini-lo como um atributo estático como o numeroDeContas, com um valor diferente para cada uma das duas classes?