Skip to content

AaronCrvl/POO--Polimorfismo-Funcoes-Virtuais-e-Classes-Abstratas

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Polimorfismo, Funções Virtuais e Classes Abstratas

Contato: carvalhosins@ufmg.br

Complemente o código a seguir, para criar uma hierarquia de classes de professores de uma Universidade de acordo com a descrição abaixo:

Os professores ou são horistas ou são de tempo integral, não existe outro tipo de professor. As únicas informações necessárias no sistema são o nome do professor e os dados para cálculo de seu salário. O salário mensal de um professor horista é o valor da sua hora de trabalho vezes o número de horas trabalhadas por ele no mês. O salário mensal de um professor de tempo integral é um valor fixo por mês.

O diagrama de classes é mostrado abaixo.

DiagramaClasses.png

class Professor{ string nome; public: Professor(string n); string getName() const; virtual double getSalario() = 0; virtual ~Professor(); };

class ProfHorista: public Professor { double nrNorasTrabalhadas; double valorHora; public: ProfHorista(string n, double nht, double vh); double getSalario(); virtual ~ProfHorista(); };

class ProfIntegral: public Professor { double salarioMensal; public: ProfIntegral(string n, double sm) double getSalario(); virtual ~ProfIntegral(){} };

Exercício 1: Continuação A universidade mantém uma lista de todos os seus professores ( vector ) e necessita de operações para adicionar professores nessa lista e para retornar o valor total pago mensalmente para todos os seus professores. Mostre o código da classe Universidade fazendo um código genérico utilizando o conceito de Polimorfismo.

Sugestão de nomes de métodos da classe Universidade :

addProfessor(...): método para adicionar professor à lista de professores; totalPago(...): método para retornar o valor total pago mensalmente para todos os professores da Universidade; Uma forma de verificar se você usou corretamente o conceito de Polimorfismo é fazendo o seguinte teste: se um novo tipo de professor for adicionando ao sistema com uma forma diferente de calcular salário, por exemplo professor de tempo parcial, o código da classe Universidade não deve sofrer nenhuma alteração. Faça este teste apenas mentalmente, você não tem que implementá-lo!

Escreva um código para testar a classe Universidade. O código deve inserir três professores na lista, sendo dois professores horistas e um professor de tempo integral. Uma vez inseridos na lista, deve-se listar (imprimir na tela) as informações desses professores e, logo em seguida, imprimir o valor total mensal que é pago para todos os professores da Universidade.

Exercício 2: Crie uma método getIntegral() que é capaz de obter a integral de uma função y=f(x) via regra do trapézio. Essa função deve ser polimórfica podendo então mudar seu comportamento dependendo se o objeto apontado é do tipo função quadrática, senoide, linear, entre outros. Para relembrar, o método do Trapézio (ou soma Trapezoidal) é um técnica de integração numérica que busca aproximar o valor da integral a partir do somatório da área dos trapézios que dividem a área total da função.

Como mostrado na Figura a seguir, a integral da função:

∫ba3ln(x)dx

Integral.png

Essa divisão pode ser arbitrária e quanto maior, mais próximo será do valor real da integral. A implementação desse cálculo de integral deve considerar no mínimo três tipos de funções:

Quadratica: ax2+bx+c Senoidal: sin(x)x Linear: ax+b // codigo exemplo

#include #include using namespace std;

class Funcao { public:

//funcao que obtem a integral da funcao pela regra do trapezio
double getIntegral(double limiteInferior, double limiteSuperior, double intervalos);

// funcao virtual representando a funcao cuja integral deve ser calculada
virtual double func(double input) = 0;

// destrutor
//virtual ~Funcao(){}

};

...

int main() { double resultado;

//cria um container de ponteiros do tipo Funcao
Funcao *f[3];

f[0] = new Quadratica(1,2,4);
f[1] = new Senoide();
f[2] = new Linear(1,4);

cout << "*** Calculo de integrais usando a regra do trapezio: ***"<<endl<<endl;
cout << "*** Funcoes ***" << endl;
cout << "(1) x^2 + 2x + 4" << endl;
cout << "(2) sen(x) / x" << endl;
cout << "(3) x + 4" << endl;
cout << endl;

for (int i=0; i<3; i++)
{
    resultado = f[i]->getIntegral(1,4,1000);
    cout << "Integral da Funcao (" << i+1 << "): " << resultado;
    cout << endl;
}

for (int i=0; i<3; i++)
{
    delete f[i];
}

return 0;

}

About

Polimorfismo, Funções Virtuais e Classes Abstratas¶

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages