Buscar

[Prof. Emiliana] Aula Prática 5

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 5 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

1 
UNIVERSIDADE FEDERAL DE OURO PRETO 
INSTITUTO DE CIÊNCIAS EXATAS E BIOLÓGICAS 
DEPARTAMENTO DE COMPUTAÇÃO 
BCC702 – PROGRAMAÇÃO DE COMPUTADORES II 
 
5a Aula Prática – Programação Orientada a Objetos 
Herança 
 
A herança proporciona o reuso de software, isto é, novas classes são criadas a partir de 
outras já existentes, absorvendo seus atributos e comportamentos e adicionando novos 
recursos que as novas classes exigem. Neste contexto, tem-se: 
 
1. Classe básica ou superclasse: É a classe já existente; 
 
2. Classe derivada ou subclasse: É a nova classe criada a partir da classe básica. 
 
A sintaxe em C++ para definição de uma classe derivada é: 
 
class nome_classe_derivada : tipo_herança nome_classe_básica{ 
 
 corpo da classe 
 
}; 
 
O tipo_herança pode ser public (mais comumente usado), protected ou private. 
 
Exemplo: 
 
 
 
Neste exemplo, um motorista é um funcionário e um engenheiro também é um 
funcionário. Um motorista além dos atributos, nome e salário, possui o número da 
carteira de motorista e a data de vencimento da mesma. Um engenheiro tem além dos 
atributos, nome e salário, o número de registro no CREA. 
 2 
Interface para a classe Funcionario: 
 
#include <string> 
using namespace std; 
 
class Funcionario{ 
 
 private: 
 string nome; 
 double salario; 
 
 public: 
 
 //Construtor: inicializa nome e salario 
 Funcionario(string n, double s); 
 
 string getNome(); 
 double getSalario(); 
 
}; 
Funcionario.h 
 
Implementação da classe Funcionario: 
#include "Funcionario.h" 
 
Funcionario::Funcionario(string n, double s){ 
 
 nome = n; 
 salario = s; 
 
} 
 
string Funcionario::getNome(){ 
 
 return nome; 
 
} 
 
double Funcionario::getSalario(){ 
 
 return salario; 
 
} 
Funcionario.cpp 
 
Interface para a classe Engenheiro: 
 
#include "Funcionario.h" //definição da classe Funcionario 
 
class Engenheiro : public Funcionario{//Classe Engenheiro é derivada 
 //da classe Funcionario 
 
 private: 
 int numCrea; 
 
 public: 
 //Construtor: inicializa nome, salario e numCrea 
 Engenheiro(string n, double s, int nc); 
 
 3 
 int getNumCrea(); 
 
}; 
Engenheiro.h 
 
Implementação da classe Engenheiro: 
 
#include "Engenheiro.h" 
 
Engenheiro::Engenheiro(string n, double s, int nc) 
: Funcionario(n, s){ //chamada ao construtor da classe Funcionario 
 
 numCrea = nc; 
 
} 
 
int Engenheiro::getNumCrea(){ 
 
 return numCrea; 
 
} 
Engenheiro.cpp 
 
Agora vamos utilizar as classes Funcionario e Engenheiro no programa principal. 
 
#include <iostream> 
using namespace std; 
 
#include "Engenheiro.h" 
 
int main(){ 
 
 Funcionario f("Pedro", 1000); 
 
 cout<<"Funcionario: "<<f.getNome()<<endl 
 <<"Salario: "<<f.getSalario()<<endl; 
 
 Engenheiro e("Maria", 10000, 1234567890); 
 
 cout<<"Engenheiro: "<<e.getNome()<<endl 
 <<"Salario: "<<e.getSalario()<<endl 
 <<"Numero de registro no CREA: "<<e.getNumCrea(); 
 
 system("pause>null"); 
 return 0; 
 
} 
<<saída>> 
 
Funcionario: Pedro 
Salario: 1000 
Engenheiro: Maria 
Salario: 10000 
Numero de registro no CREA: 1234567890 
 
 
 
 
 4 
Exercícios 
 
1. Modifique o método main anterior definindo um engenheiro com número de 
registro no CREA igual a 10000 e os atributos nome e salário com valores iguais aos 
do objeto f (já definido). 
 
2. Implemente a classe Motorista do exemplo acima. Em seguida, teste a classe 
implementada. 
 
3. Adicione métodos print() nas classes Funcionario, Motorista e Engenheiro para 
imprimir os seus atributos. 
 
4. Defina uma classe para armazenar os dados relativos aos usuários de um laboratório. 
A classe deverá conter os seguintes atributos: 
 
� Nome (string) 
� E-mail (string) 
� Idade (int) 
 
Escreva os métodos: 
 
� Usuario(string n, string em, int id): construtor que inicializa os atributos de um 
objeto da classe; 
� getNome(): retorna o nome armazenado pelo objeto da classe; 
� getIdade(): retorna a idade armazenada pelo objeto da classe; 
� getEmail(): retorna o email armazenado pelo objeto da classe. 
 
5. Defina uma hierarquia de classes para armazenar os dados relativos a usuários 
de um laboratório, que podem ser alunos e professores. Defina uma classe básica 
Usuario e duas classes derivadas dessa classe básica, as classes Aluno e Professor. A 
classe Usuario será a mesma do exercício 4. A classe Aluno, derivada de Usuario, 
deverá conter, adicionalmente, os seguintes atributos: 
 
� número de matrícula (string); 
� curso (string). 
 
A classe Aluno deverá conter, adicionalmente, os seguintes métodos: 
 
� Aluno(string n, string em, int id, string mat, string curs): construtor que inicializa 
os atributos de um objeto da classe; 
� getMatricula(): retorna o número de matrícula do aluno; 
� getCurso(): retorna o curso do aluno. 
 
A classe Professor deverá conter, adicionalmente, os seguintes atributos: 
 
� departamento (string); 
� número da sala (int). 
 
A classe Professor deverá conter, adicionalmente, os seguintes métodos: 
 
 5 
� Professor(string n, string em, int id, string dep, string s): construtor que 
inicializa os atributos de um objeto da classe; 
� getDepto(): retorna o departamento ao qual o professor pertence; 
� getSala(): retorna o número da sala do professor. 
 
Teste as classes e as funções escritas.

Outros materiais