1
resposta

[Dúvida] taxaDeSaque como um atributo

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?

1 resposta

Olá Vitor, tudo bem?

Sua pergunta é muito interessante e mostra que você está pensando em diferentes maneiras de implementar a mesma funcionalidade.

Em relação à sua pergunta, é possível sim utilizar um atributo protegido para armazenar a taxa de saque ao invés de um método virtual. No entanto, é importante lembrar que, caso a taxa de saque precise ser alterada em algum momento, será necessário alterar o código de todas as classes derivadas. Já com o método virtual, é possível sobrescrever o comportamento da função em cada classe derivada, sem precisar alterar o código da classe base.

Quanto à sua segunda pergunta, é possível sim definir a taxa de saque como um atributo estático com um valor diferente para cada uma das classes derivadas. No entanto, é importante lembrar que, caso a taxa de saque precise ser alterada em algum momento, será necessário alterar o código de todas as classes derivadas novamente.

Espero ter ajudado e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software