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.