O código abaixo não indica corretamente a soma das bonificações.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ByteBank.Funcionarios
{
public class Funcionario
{
public static int TotalFuncionarios { get; private set; }
public string Nome { get; set; }
public string CPF { get; private set; }
public double Salario { get; protected set; }
public Funcionario(double salario, string cpf)
{
Salario = salario;
CPF = cpf;
TotalFuncionarios++;
}
public virtual double AumentaSalario()
{
return Salario *= 1.1;
}
public virtual double GetBonificacao()
{
return Salario * 0.1;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ByteBank.Funcionarios
{
public class Diretor : Funcionario
{
public Diretor(double salario, string cpf) : base(salario, cpf) {}
public override double AumentaSalario()
{
return Salario *= 1.15;
}
public override double GetBonificacao()
{
return Salario + base.GetBonificacao();
}
}
}
using ByteBank.Funcionarios;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ByteBank
{
public class GerenciadorBonificacao
{
private double _totalBonificacao;
public void Registrar(Funcionario funcionario)
{
_totalBonificacao += funcionario.GetBonificacao();
}
public double GetTotalBonificacao()
{
return _totalBonificacao;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ByteBank.Funcionarios;
namespace ByteBank
{
class Program
{
static void Main(string[] args)
{
Funcionario sam = new Funcionario(2000, "159.357.486-82");
Diretor adm = new Diretor(5000, "578.165.167-71"); //pode-se usar Funcionario e Diretor() pois Diretor é "filha" de Funcionario
GerenciadorBonificacao gerenciador = new GerenciadorBonificacao();
Console.WriteLine("O cpf de Sam é: " + sam.CPF);
Console.WriteLine("O cpf de Adm é: " + adm.CPF);
sam.Nome = "Sam";
//sam.CPF = "159.357.486-82";
//sam.Salario = 2000;
gerenciador.Registrar(sam);
sam.AumentaSalario();
Console.WriteLine();
Console.WriteLine("Salário Sam: " + sam.Salario);
Console.WriteLine("A bonificação do funcionário Sam é de: " + sam.GetBonificacao());
adm.Nome = "Adm";
//adm.CPF = "578.165.167-71";
//adm.Salario = 5000;
gerenciador.Registrar(adm);
adm.AumentaSalario();
Console.WriteLine();
Console.WriteLine("Salário Adm: " + adm.Salario);
Console.WriteLine("A bonificação do diretor Adm é de: " + adm.GetBonificacao());
Console.WriteLine();
Console.WriteLine("A soma das bonificações é de: " + gerenciador.GetTotalBonificacao());
Console.WriteLine();
Console.WriteLine("Número de Funcionários: " + Funcionario.TotalFuncionarios);
Console.ReadLine();
}
}
}
Ele compila normalmente, porém notei que há provavelmente um erro na classe GerenciadorBonificacao, já que quando o altero deixando o diretor com Salario = 0, o valor de GetTotalBonificacao é igual a 5000. Caso esteja como nesse código, o resultado de GetTotalBonificacao será 5700