Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Erro ao aplicar o conceito de herança

Criei a Classe ContaPoupanca porém ao definir que ela herda da classe Conta ocorre o seguinte erro. " There is no argument given that corresponde to the required formal do parameter ‘numero’ of ContaPoupanca.ContaPoupanca(int, string, double, Cliente)""

Classe Conta

public class Conta
    {

        public int numero{ get; protected set; }
        public string titular { get; set; }
        public double Saldo { get; protected set; }
        public Cliente cliente;

        public Conta (int numero, string titular,double saldo, Cliente cliente){
            this.numero = numero;
            this.titular = titular;
            this.Saldo = saldo;
            this.cliente = cliente;

        }




        // criando metodo de saque

        public virtual void Saca(double valorSacado){

            if(valorSacado <= this.Saldo && valorSacado > 0){
                if (this.cliente.ehMaior()){
                    this.Saldo -= valorSacado;
                }else{
                    valorSacado = 200.0;                   
                    this.Saldo -= valorSacado;                 
                }
            }   


        }


        // criando metodo para transferencia
        public void Deposito(double valorDeposito){
            if (valorDeposito < this.Saldo && valorDeposito> 0)
                this.Saldo += valorDeposito;
        }


        public void Transfere(double vlrT , Conta destino){

            if (vlrT < this.Saldo && vlrT > 0){

                this.Saca(vlrT);
                destino.Deposito(vlrT);
            }
        }


    }
}

Classe ContaPoupanca

   public class ContaPoupanca : Conta
    {
            public override void Saca(double valorSacado){
            this.Saldo -= valorSacado + 0.1;

    }


}
2 respostas
solução!

Oi Gabriel, tudo bom?

O erro está diretamente relacionado ao construtor da classe Conta:

public Conta (int numero, string titular,double saldo, Cliente cliente){
            this.numero = numero;
            this.titular = titular;
            this.Saldo = saldo;
            this.cliente = cliente;

        }

Quando criamos este construtor estamos dizendo que a unica forma de criar uma conta é dizendo o numero, titular, saldo e o Cliente dela.

Quando herdamos de Conta em ContaCorrente estamos dizendo que uma ContaCorrente é uma Conta. Isso significa que ela também precisa de um construtor que receba numero, titular, saldo e Cliente. Algo como:

public ContaCorrente (int numero, string titular,double saldo, Cliente cliente) :  base (numero, titular, saldo, cliente){
}

Assim, passamos para a classe Conta, através da chamada do base, o numero, titular saldo e cliente que ela precisa =)

Uma outra forma de resolver o problema é abrir uma possibilidade de criar uma Conta sem nenhum argumento, assim podemos criar uma ContaCorrente sem argumentos também. Algo como:

// construtor default
public Conta(){
}

Ou seja, agora estamos dizendo que além de conseguir criar uma conta com numero, titular, saldo e cliente também é possivel criar uma conta sem nenhum argumento =)

Abraço e bons estudos.

Olá André, tudo certo!

Muito obrigado pela orientação, vou conseguir dar andamento nos estudos.

Valeu!