Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
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.