Quando fiz as alterações conforme mostrado na ultima aula do curso, o ultimo saldo que é exibido está zerado.
Percebi que quando a classe estudante é estanciada, existem duas estancias da Classe ManipuladorDeSaldo, e quando chamamos o SomaInvestimentos, a classe ManipuladorDeSaldo, é utilizado para a soma do objeto gerado pela classe ContaComum e não pela ContaEstudante. Por isso o saldo está zerado para a ContaEstudante.
Não entendi como consultar o saldo do estudante para printar na tela no metodo main().
Quando inspeciono o objeto contas, na classe ProcessadorDeInvestimentos, o ultimo objeto(do ContaEstudante) possui duas instancias do ManipuladorDeInvestimento, uma correta com o saldo que adicionei e outra com o saldo zerado. Não entendi como resolver isso.
Main:
public class ProcessadorDeInvestimentos
{
static void Main(string[] args)
{
IList<ContaComum> contas = ContasDoBanco();
foreach (ContaComum conta in contas)
{
conta.SomaInvestimento();
Console.WriteLine("Novo saldo: " + conta.Saldo());
}
Console.ReadLine();
}
private static IList<ContaComum> ContasDoBanco()
{
List<ContaComum> contas = new List<ContaComum>();
contas.Add(umaContaComum(100));
contas.Add(umaContaComum(150));
contas.Add(umaContaEstudante(100));
return contas;
}
private static ContaEstudante umaContaEstudante(double saldo)
{
ContaEstudante conta = new ContaEstudante();
conta.Deposita(saldo);
return conta;
}
private static ContaComum umaContaComum(double saldo)
{
ContaComum conta = new ContaComum();
conta.Deposita(saldo);
return conta;
}
}
}
Conta Comum:
public class ContaComum
{
private ManipuladorDeSaldo manipulador;
public ContaComum()
{
this.manipulador = new ManipuladorDeSaldo();
}
public void SomaInvestimento()
{
this.manipulador.SomaInvestimento(1.1);
}
public void Saca(double valor)
{
manipulador.Saca(valor);
}
public void Deposita(double valor)
{
manipulador.Deposita(valor);
}
public double Saldo()
{
return manipulador.Saldo;
}
}
ContaEstudante:
public class ContaEstudante : ContaComum
{
private ManipuladorDeSaldo m;
public int Milhas { get; private set; }
public ContaEstudante()
{
m = new ManipuladorDeSaldo();
}
public void Deposita(double valor)
{
m.Deposita(valor);
this.Milhas += (int)valor;
}
}
Manipulador de Saldo:
class ManipuladorDeSaldo
{
public double Saldo { get; private set; }
public void Deposita(double valor)
{
this.Saldo += valor;
}
public void Saca(double valor)
{
if (valor <= this.Saldo)
{
this.Saldo -= valor;
}
else
{
throw new ArgumentException();
}
}
public void SomaInvestimento(double taxa)
{
this.Saldo *= taxa;
}
}