-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.cpp
145 lines (118 loc) · 4.25 KB
/
main.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#include <iostream>
#include <string>
using namespace std;
#include <locale>
/* Crie um programa que modele diferentes tipos de funcionários em uma empresa.
A classe base será Funcionario, que terá atributos como nome e salarioBase,
além de um método virtual calcularSalarioFinal().
A classe derivada FuncionarioComissionado deve adicionar uma comissão ao salário base,
e a classe FuncionarioHorista deve calcular o salário com base nas horas trabalhadas.
Requisitos:
a. Crie a classe base Funcionario com os atributos nome e salarioBase, além do método calcularSalarioFinal() (virtual).
b. Crie as classes FuncionarioComissionado e FuncionarioHorista que sobrescrevem calcularSalarioFinal().
c. No método principal, crie instâncias dos funcionários e calcule seus salários finais. */
class Funcionario {
public:
string nome;
double salarioBase;
virtual double calcularSalarioFinal() const {
return salarioBase;
}
};
class FuncionarioComissionado : public Funcionario {
private:
double comissao;
double vendasMensais;
public:
void setComissao(double c) {
comissao = c;
}
double getvendasMensais() const {
return vendasMensais;
}
void setvendasMensais(double c) {
vendasMensais = c;
}
double getComissao() const {
return comissao;
}
double calcularSalarioFinal() const override {
return salarioBase + (comissao * vendasMensais * 0.01);
}
};
class FuncionarioHorista : public Funcionario {
private:
double valorHora;
int horasTrabalhadas;
public:
void setValorHora(double h) {
valorHora = h;
}
double getValorHora() const {
return valorHora;
}
void setHorasTrabalhadas(int ht) {
horasTrabalhadas = ht;
}
int getHorasTrabalhadas() const {
return horasTrabalhadas;
}
double calcularSalarioFinal() const override {
return salarioBase + (valorHora * horasTrabalhadas);
}
};
int main() {
setlocale(LC_ALL, "portuguese");
int escolha;
Funcionario* funcionario;
do {
cout << "\nMenu:\n";
cout << "1. Funcionário Comissionado\n";
cout << "2. Funcionário Horista\n";
cout << "0. Sair\n";
cout << "Escolha: ";
cin >> escolha;
switch (escolha) {
case 1:
funcionario = new FuncionarioComissionado();
break;
case 2:
funcionario = new FuncionarioHorista();
break;
case 0:
cout << "Saindo...\n";
break;
default:
cout << "Opção inválida!\n";
}
if (escolha != 0) {
cout << "\nDigite o nome do funcionário: ";
cin.ignore(); // Limpa o buffer para ler a linha completa
getline(cin, funcionario->nome);
cout << "Digite o salário base: R$";
cin >> funcionario->salarioBase;
if (dynamic_cast<FuncionarioComissionado*>(funcionario)) {
double vendasMensais;
double comissao;
cout << "Digite a comissão (%): ";
cin >> comissao;
static_cast<FuncionarioComissionado*>(funcionario)->setComissao(comissao);
cout << "Digite o valor das vendas mensais: R$";
cin >> vendasMensais;
static_cast<FuncionarioComissionado*>(funcionario)->setvendasMensais(vendasMensais);
} else if (dynamic_cast<FuncionarioHorista*>(funcionario)) {
double valorHora, horasTrabalhadas;
cout << "Digite o valor da hora trabalhada: R$";
cin >> valorHora;
static_cast<FuncionarioHorista*>(funcionario)->setValorHora(valorHora);
cout << "Digite as horas trabalhadas: ";
cin >> horasTrabalhadas;
static_cast<FuncionarioHorista*>(funcionario)->setHorasTrabalhadas(horasTrabalhadas);
}
double salarioFinal = funcionario->calcularSalarioFinal();
cout << "\nSalário final do funcionário " << funcionario->nome << ": R$" << salarioFinal << endl;
delete funcionario; // Liberar memória alocada dinamicamente
}
} while (escolha != 0);
return 0;
}