Oi, Fernando, bom dia.
Em relação a esse construtor que você criou em FuncionarioAutenticavel
:
public FuncionarioAutenticavel(double salario, string cpf): base()
{
}
Você está recebendo o salário e o CPF como argumentos de entrada e não os atribui às propriedades devidas, justamente porque optou por usar o construtor sem parâmetros de Funcionario
.
Se coloque no lugar de alguém usando sua classe. Ela irá instanciar um funcionário autenticável convicta de que seu salário e CPF estarão atribuídos...
var fa = new FuncionarioAutenticavel(
salario: 2500,
cpf: "111222333-44"
);
...mas quando for utilizá-los terá uma surpresa:
Console.WriteLine(fa.Salario); //imprimirá 0!
Console.WriteLine(fa.CPF); //imprimirá ""!
Então não é questão de boa prática. Ele está errado, apesar de compilar.
Espero que tenha esclarecido. Deixe aqui sua opinião.