Orientação a Objetos. Programação em C++

Documentos relacionados
Encapsulamento. Alberto Costa Neto DComp - UFS

Orientação a Objetos - Programação em C++

Computação 2. Aula Profª. Fabiany Listas Duplamente Encadeadas

Laboratório de programação II

PCS3111. Laboratório de Programação Orientada a Objetos para Engenharia Elétrica. Aula 6: Polimorfismo

Programação em C/C++

ESTRUTURA COM DECISÃO COMPOSTA

Herança. BCC702-Programação de Computadores II Emiliana Mara Lopes Simões Universidade Federal de Ouro Preto abril 2010

Computação L2. Linguagem C++ Observação: Material Baseado na Disciplina Computação Eletrônica.

Programação Orientada a Objetos. Vagner Luz do Carmo - Vluzrmos

Interfaces POO. Prof. Marcio Delamaro

Universidade de Mogi das Cruzes Implementação Orientada a Objetos - Profª. Danielle Martin. Guia da Sintaxe do Java

CIÊNCIA DA COMPUTAÇÃO - LINGUAGEM DE PROGRAMAÇÃO II REVISÃO POO

Análise de Programação

Programação com Objectos. Processamento de Dados I. 2. Classes, Atributos e Métodos

Programação Aplicada à Engenharia

# Estrutura de Dados # Aula - Revisão de C/C++ na Prática. Prof. Leinylson Fontinele Pereira

Aula 05: Condicionais (Parte 2)

Programação OO em Java. Profa Andréa Schwertner Charão DELC/CT/UFSM

Tipos, Literais, Operadores

Tipos, Literais, Operadores

Fundamentos de Programação1

Programação Estruturada e Orientada a Objetos

Palavras Reservadas da Linguagem Java

Linguagem de Programação II Implementação

Computação Informática

C++ - Funções Virtuais (Polimorfismo) Base. Deriv0 Deriv1 Deriv2. print( ) print( ) print( ) dv0 dv1 dv2. p[0] = &dv0; p[1] = &dv1; p[2] = &dv2;

Sintaxe Geral Tipos de Dados. Prof. Angelo Augusto Frozza, M.Sc.

PCS Laboratório de Programação Orientada a Objetos 1a. Prova. 02 de Setembro de 2015

Programação científica C++

C com introdução a OO

//conteúdo do arquivo Matriz.h class Matriz { private: int *elementos; int numerodelinhas; int numerodecolunas; void setnumerodelinhas(int); void

Linguagem de Programação C++

Fundamentos de Programação

Escreva a função e_caracter que verifica se um determinado caracter é um numero ou não. Escreva um Programa de teste da função.

5 - COMANDOS DE CONTROLE DE PROGRAMA Em C existem os comandos de decisões, os comandos de iteração (ou de laços) e os comandos de desvios.

Ederson Luiz da Silva Ciência da Computação. Algoritmos e Programação

Linguagens de Programação Conceitos e Técnicas. Amarrações

Herança e Polimorfismo

Notas de Aula 04: Herança e polimorfismo.

Lista 05 Herança. public class PessoaFisica extends Pessoa { private String RG; public PessoaFisica(){ super(); } public String getrg(){ return RG; }

Programação Orientada a Objetos

Linguagem Java - Introdução

Herança. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

Fundamentos Básicos da linguagem Java (Programação Orientada a Objetos) Prof. Responsáveis Wagner Santos C. de Jesus

Paradigmas de Programação. Java First-Tier: Aplicações. Orientação a Objetos em Java (I) Nomenclatura. Paradigma OO. Nomenclatura

Polimorfismo. PARTE II: Java e OO. Polimorfismo. Polimorfismo. Polimorfismo. Polimorfismo

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan Prof a. Rachel Reis

Programação por Objectos. Java

Programação. Orientada a Objetos: Herança. Objetos. Relacionamento entre classes. Análise e Projeto Orientados a. Objetos

Linguagem C++ Estruturas de controle Parte II Estruturas de repetição

INTRODUÇÃO AO C++ SISTEMAS DE INFORMAÇÃO DR. EDNALDO B. PIZZOLATO

Programação Orientada a Objetos

Conceito de classe em C++

Fundamentos de Programação 2

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS

Módulo 5. Instruções if e switch. Algoritmos e Estruturas de Dados I C++ (Rone Ilídio)

Classe Abstrata e Interface

Introdução à Programação. Conceitos Básicos de Orientação a Objetos

Algoritmos e Programação 2. Objetos e Classes em Java. Classes. Revisão. Definições de classes incluem (geralmente):

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Programação Orientada a Objetos Classes Abstratas. Sérgio Soares

Linguagem de Programação III

Transcrição:

OO Engenharia Eletrônica Orientação a Objetos - Programação em C++ Slides 11: Herança et al. (Funções Virtuais, Polimorfismo, Herança Múltipla, Funções Virtuais Puras e Classes Abstratas.) Prof. Jean Marcelo SIMÃO

Exercício 1 - Criar uma lista no sistema com todas as pessoas criadas independentemente de suas especializações (Professor, Aluno). - Na classe Professor criar um atributo Salario e um método InformaProventos. - Criar uma classe Estagiario derivado de Aluno, com um atributo BolsaEstudo e um método InformaProventos.

Exercício 1 - Criar uma lista no sistema com todas as pessoas criadas independentemente de suas especializações (Professor, Aluno). - Na classe Professor criar um atributo Salario e um método InformaProventos. - Criar uma classe Estagiario derivado de Aluno, com um atributo BolsaEstudo e um método InformaProventos.

#ifndef _PRINCIPAL_H_ #define _PRINCIPAL_H_ #include "Lista.h" #include "Professor.h" #include "Universidade.h" #include "Departamento.h" #include "Disciplina.h" #include "Aluno.h" class Principal private: int cont_iddisc; int cont_iddepart; int cont_idaluno; Universidade UTFPR; Universidade Princeton; Universidade Cambridge; Departamento EletronicaUTFPR; Departamento MatematicaUTFPR; Departamento FisicaUTFPR; Departamento MatematicaPrinceton; Departamento FisicaPrinceton; Departamento MatematicaCambridge; Departamento FisicaCambridge; Professor Professor Professor Disciplina Disciplina Disciplina Disciplina Aluno Aluno Aluno Aluno Aluno Simao; Einstein; Newton; Computacao1_2006; Introd_Alg_2007; Computacao2_2007; Metodos2_2007; AAA; BBB; CCC; DDD; EEE; int int int Lista <Universidade> Lista <Departamento> Lista <Disciplina> Lista <Aluno> Lista <Pessoa> Principal ( ); void Inicializa(); void InicializaUnivesidades(); void InicializaDepartamentos(); void InicializaProfessores(); void InicializaAlunos(); void InicializaDisciplinas(); void Executar(); void CalcIdadeProfs(); void UnivOndeProfsTrabalham(); void DepOndeProfsTrabalham(); void ListeDiscDeptos ( ); void ListeAlunosDisc(); void CadDisciplina(); void CadDepartamento(); void CadUniversidade(); void CadAluno(); void GravarTudo(); void GravarUniversidades(); void GravarDepartamentos(); void GravarDisciplinas(); void GravarAlunos(); void GravarProfessores(); void MenuCad(); void MenuExe(); void Menu(); ; #endif diaatual; mesatual; anoatual; LUniversidades; LDepartamentos; LDisciplinas; LAlunos; LPessoas;

void Principal::InicializaAlunos() Pessoa* ponteiropessoa = NULL; Aluno* ponteiroaluno = NULL; AAA.setNome ("AAA"); LAlunos. incluainfo (&AAA, AAA.getNome()); ponteiroaluno = &AAA; // ponteiropessoa = ( Pessoa * ) ( ponteiroaluno ); ponteiropessoa = static_cast < Pessoa * > ( ponteiroaluno ); LPessoas.incluaInfo ( ponteiropessoa, ponteiropessoa->getnome() ); BBB.setNome("BBB"); LAlunos. incluainfo (&BBB, BBB.getNome()); ponteiroaluno = &BBB; ponteiropessoa = static_cast<pessoa*>(ponteiroaluno); LPessoas. incluainfo (ponteiropessoa, ponteiropessoa->getnome()); CCC.setNome("CCC"); LAlunos. incluainfo (&CCC, CCC.getNome()); ponteiroaluno = &CCC; ponteiropessoa = static_cast<pessoa*>(ponteiroaluno); LPessoas. incluainfo (ponteiropessoa, ponteiropessoa->getnome()); DDD.setNome("DDD"); LAlunos. incluainfo (&DDD, DDD.getNome()); ponteiroaluno = &DDD; ponteiropessoa = static_cast<pessoa*>(ponteiroaluno); LPessoas. incluainfo (ponteiropessoa, ponteiropessoa->getnome()); EEE.setNome("EEE"); LAlunos. incluainfo (&EEE, EEE.getNome()); ponteiroaluno = &EEE; ponteiropessoa = static_cast<pessoa*>(ponteiroaluno); LPessoas. incluainfo (ponteiropessoa, ponteiropessoa->getnome());

void Principal::InicializaProfessores ( ) Pessoa* ponteiropessoa; Professor* ponteiroprofessor; // Inicialização do(s) ojeto(s) da classe Professor Simao.Inicializa ( 3, 10, 1976, "Jean Simão" ); Einstein.Inicializa ( 14, 3, 1879, "Albert Einstein" ); Newton.Inicializa ( 4, 1, 1643, "Isaac Newton" ); // "Filiação" ao departamento. Simao.setDepartamento ( &EletronicaUTFPR ); Einstein.setDepartamento ( &FisicaPrinceton ); Newton.setDepartamento ( &MatematicaCambridge ); ponteiroprofessor = &Simao; ponteiropessoa = static_cast<pessoa*>(ponteiroprofessor); LPessoas.incluaInfo (ponteiropessoa, ponteiropessoa->getnome()); ponteiroprofessor = &Einstein; ponteiropessoa = static_cast<pessoa*>(ponteiroprofessor); LPessoas.incluaInfo (ponteiropessoa, ponteiropessoa->getnome()); ponteiroprofessor = &Newton; ponteiropessoa = static_cast<pessoa*>(ponteiroprofessor); LPessoas.incluaInfo (ponteiropessoa, ponteiropessoa->getnome());

void Principal::MenuExe() int op = -1; while ( op!= 7 ) system ("cls"); cout << " Informe sua opção: " << endl; cout << " 1 - Listar Disciplinas. " << endl; cout << " 2 - Listar Departamentos. cout << " 3 - Listar Universidade. " << endl; cout << " 4 - Listar Alunos. cout << " 5 - Listar Professores. " << endl; cout << " 6 - Listar Pessoas. cout << " 7 Sair. " << endl; cin >> op; " << endl; " << endl; " << endl; switch ( op ) case 1: Disciplinas.listeInfos(); system ("Pause"); break; case 2: LDepartamentos.listeInfos(); system ("Pause"); break; case 3: LUniversidades.listeInfos(); system ("Pause"); break; case 4: LAlunos.listeInfos(); system ("Pause"); break; case 5: DepOndeProfsTrabalham(); system ("Pause"); break; case 6: LPessoas.listeInfos(); system ("Pause"); break; case 7: cout << " FIM " << endl; break; default: cout << " Opção Inválida - Pressione uma tecla. " << endl; getchar();

void Principal::MenuExe() int op = -1; while ( op!= 7 ) system ("cls"); cout << " Informe sua opção: " << endl; cout << " 1 - Listar Disciplinas. " << endl; cout << " 2 - Listar Departamentos. cout << " 3 - Listar Universidade. " << endl; cout << " 4 - Listar Alunos. cout << " 5 - Listar Professores. " << endl; cout << " 6 - Listar Pessoas. cout << " 7 Sair. " << endl; cin >> op; " << endl; " << endl; " << endl; Obs. a parte: o comando system nos permite introduzir o princípio de API, por não deixar de ser uma (mesmo que simplificadamente). API (Application Programming Interface) permite ao programa acessar uma outra aplicação via uma interface. Neste caso, o system é a interface que permite acessar comandos do DOS. switch ( op ) case 1: Disciplinas.listeInfos(); system ("Pause"); break; case 2: LDepartamentos.listeInfos(); system ("Pause"); break; case 3: LUniversidades.listeInfos(); system ("Pause"); break; case 4: LAlunos.listeInfos(); system ("Pause"); break; case 5: DepOndeProfsTrabalham(); system ("Pause"); break; case 6: LPessoas.listeInfos(); system ("Pause"); break; case 7: cout << " FIM " << endl; break; default: cout << " Opção Inválida - Pressione uma tecla. " << endl; getchar();

void Principal::CadAluno() char nomealuno [150]; int ra; Aluno* ponteiroaluno; Pessoa* ponteiropessoa; cout << "Qual o nome do aluno. " << endl; cin >> nomealuno; cout << "Qual o RA do aluno." cin >> ra; << endl; ponteiroaluno = new Aluno ( cont_idaluno++ ); ponteiroaluno->setnome ( nomealuno ); ponteiroaluno->setra ( ra ); LAlunos.incluaInfo (ponteiroaluno, ponteiroaluno->getnome()); // Logo abaixo a forma moderna de fazer cast ponteiropessoa = static_cast < Pessoa* > ( ponteiroaluno ); // Logo abaixo a forma antiga e desaconselhavel de fazer cast // ponteiropessoa = ( Pessoa* ) ponteiroaluno; LPessoas.incluaInfo ( ponteiropessoa, ponteiropessoa->getnome() );

Exercício 1 - Criar uma lista no sistema com todas as pessoas criadas independentemente de suas especializações (Professor, Aluno). - Na classe Professor criar um atributo Salario e um método InformaProventos. - Criar uma classe Estagiario derivado de Aluno, com um atributo BolsaEstudo e um método InformaProventos.

#ifndef _PROFESSOR_H_ #define _PROFESSOR_H_ #include "Pessoa.h" #include "Conhecimento.h" #include "Universidade.h class Professor : public Pessoa private: Universidade* punivfiliado; Departamento* pdptofiliado; float salario; float bolsa_projeto; ; Professor(int diana, int mesna, int anona, char* nome = ""); Professor(); ~Professor(); void inicializa(); void setunivfiliado(universidade* pu); void setdepartamento(departamento* pdep); void OndeTrabalho(); void QualDepartamentoTrabalho(); void setsalario ( float s ); float getsalario (); void setbolsasalario( float s ); float getbolsasalario (); void informaproventos(); #endif #include stdafx.h #include "Professor.h" Professor::Professor(int diana, int mesna, int anona, char* nome"): Pessoa(diaNa, mesna, anona, nome) inicializa(); Professor::Professor(): Pessoa() inicializa(); void Professor::inicializa() salario = 0; bolsa_projeto = 0; // void Professor::setSalario (float s) salario = s; float Professor::getSalario ( ) return salario; void Professor::informaProventos ( ) cout << "O valor da salário do Prof. " << nomep << " é " << (salario+bolsa_projeto) << endl;

void Principal::InicializaProfessores ( ) Pessoa* ponteiropessoa; Professor* ponteiroprofessor; Simao.Inicializa ( 3, 10, 1976, "Jean Simão" ); Einstein.Inicializa ( 14, 3, 1879, "Albert Einstein" ); Newton.Inicializa ( 4, 1, 1643, "Isaac Newton" ); Simao.setBolsaProjeto (1000); Simao.setSalario (4000); Einstein.setSalario (25000); Newton.setSalario (25000); Simao.setUnivFiliado ( &UTFPR ); Einstein.setUnivFiliado ( &Princeton ); Newton.setUnivFiliado ( &Cambridge ); Simao.setDepartamento ( &EletronicaUTFPR ); Einstein.setDepartamento ( &FisicaPrinceton ); Newton.setDepartamento ( &MatematicaCambridge ); ponteiroprofessor = &Simao; ponteiropessoa = static_cast<pessoa*>(ponteiroprofessor); LPessoas.incluaInfo (ponteiropessoa, ponteiropessoa-> getnome()); ponteiroprofessor = &Einstein; ponteiropessoa = static_cast<pessoa*>(ponteiroprofessor); LPessoas.incluaInfo (ponteiropessoa, ponteiropessoa->getnome()); ponteiroprofessor = &Newton; ponteiropessoa = static_cast<pessoa*>(ponteiroprofessor); LPessoas.incluaInfo(ponteiroPessoa, ponteiropessoa->getnome());

Exercício 1 - Criar uma lista no sistema com todas as pessoas criadas independentemente de suas especializações (Professor, Aluno). - Na classe Professor criar um atributo Salario e um método InformaProventos. - Criar uma classe Estagiario derivado de Aluno, com um atributo BolsaEstudo e um método InformaProventos.

#ifndef _ESTAGIARIO_H_ #define _ESTAGIARIO_H_ #include "Aluno.h class Estagiario : public Aluno protected: float BolsaEstudo; Estagiario (int diana, int mesna, int anona, char* nome = ""); Estagiario(); ~Estagiario(); void inicializa(); void setbolsaestudo(float b); float getbolsaestudo(); void informaproventos(); ; #endif #include "stdafx.h" #include "Estagiario.h" Estagiario::Estagiario (int diana, int mesna, int anona, char* nome): Aluno (diana, mesna, anona, nome) inicializa(); Estagiario::Estagiario() : Aluno() inicializa(); Estagiario::~Estagiario() void Estagiario::inicializa() BolsaEstudo = 0; void Estagiario::setBolsaEstudo (float b) BolsaEstudo = b; float Estagiario::getBolsaEstudo() return BolsaEstudo; void Estagiario::informaProventos() cout << "O valor da bolsa de " << nomep << " é " << BolsaEstudo << ". << endl;

#ifndef _PRINCIPAL_H_ #define _PRINCIPAL_H_ #include "Lista.h" #include "Professor.h" #include "Universidade.h" #include "Departamento.h" #include "Disciplina.h" #include "Aluno.h" #include "Estagiario.h" class Principal private: Aluno Aluno Aluno Aluno Aluno Estagiario Estagiario lista <Pessoa> AAA; BBB; CCC; DDD; EEE; Fulano; Ciclano; LPessoas; Principal ( ); void InicializaEstagiarios (); void Executar (); ; #endif

void Principal::InicializaEstagiarios ( ) Pessoa* ponteiropessoa; Aluno* ponteiroaluno; Estagiario* ponteiroestagiario; // ************************************ Fulano.setNome ("Fulano"); Fulano.setBolsaEstudo (800); ponteiroestagiario = &Fulano; ponteiroaluno = static_cast<aluno*>(ponteiroestagiario); LAlunos.incluaInfo ( ponteiroaluno, ponteiroaluno->getnome( ) ); ponteiropessoa = static_cast<pessoa*>(ponteiroaluno); LPessoas.incluaInfo ( ponteiropessoa, ponteiropessoa->getnome( ) ); // ************************************ Ciclano.setNome ("Ciclano"); Ciclano.setBolsaEstudo (801); ponteiroestagiario = &Ciclano; ponteiroaluno = static_cast<aluno*>(ponteiroestagiario); LAlunos.incluaInfo ( ponteiroaluno, ponteiroaluno->getnome( ) ); ponteiropessoa = static_cast<pessoa*>(ponteiroaluno); LPessoas.incluaInfo ( ponteiropessoa, ponteiropessoa->getnome( ) );

Métodos ou funções virtuais.

Métodos ou funções virtuais. #ifndef _PESSOA_H_ #define _PESSOA_H_ class Pessoa protected: int diap; int mesp; int anop; int idadep; char nomep[30]; Pessoa ( int diana, int mesna, int anona, char* nome = "" ); Pessoa ( ) ; void Inicializa (int diana, int mesna, int anona, char* nome = ""); void Calc_Idade ( int diaat, int mesat, int anoat ); void Calc_Idade ( int anoat); int informaidade ( ); Qualquer método pode ser redefinido em uma classe derivada. Por exemplo, informaidade() poderia ser redefinida na classe Professor. Assim um objeto Professor usaria a função informaidade() definida na sua classe. Entretanto, se ele fosse convertido (cast) para Pessoa, ele utilizaria a função informaidade() definida na sua superclasse. Já no caso de uma função virtual, mesmo que o objeto seja convertido para sua superclasse, ele continuará utilizando a função de sua classe! void setnome ( char* n ); char* getnome ( ); virtual void informaproventos(); ; #endif void Pessoa::informaProventos() cout << "Nenhuma informação sobre proventos de << nomep << "." << endl;

#ifndef _ALUNO_H_ #define _ ALUNO _H_ #include "Pessoa.h" class Aluno : public Pessoa ; #endif #ifndef _PESSOA_H_ #define _PESSOA_H_ class Pessoa protected: virtual void informaproventos(); ; #endif #ifndef _PROFESSOR_H_ #define _PROFESSOR_H_ #include "Pessoa.h" #include "Universidade.h«class Professor : public Pessoa void informaproventos(); ; #endif #ifndef _ESTAGIARIO_H_ #define _ESTAGIARIO_H_ #include "Aluno.h" class Estagiario : public Aluno void informaproventos(); ; #endif

Ligação Dinâmica Exemplo de uso de função virtual. void Principal::ListeProventosPessoas() Elemento <Pessoa>* ponteiroelementopessoa; Pessoa* ponteiropessoa; ponteiroelementopessoa = LPessoas.getPrimeiro(); while ( ponteiroelementopessoa!= NULL ) ponteiropessoa = ponteiroelementopessoa->getinfo(); ponteiropessoa->informaproventos(); ponteiroelementopessoa = ponteiroelementopessoa->getproximo();

Polimorfismo Métodos (funções-membro) polimórficas: Dois métodos em classes diferentes com mesma assinatura (forma) mas com implementações diferentes, sendo estas classes derivadas de uma mesma classe base e estes métodos implementações de um método virtual definido nesta. #ifndef _ALUNO_H_ #define _ ALUNO _H_ #include "Pessoa.h" class Aluno : public Pessoa ; #endif #ifndef _PESSOA_H_ #define _PESSOA_H_ class Pessoa protected: virtual void informaproventos(); ; #endif #ifndef _PROFESSOR_H_ #define _PROFESSOR_H_ #include "Pessoa.h" #include "Universidade.h«class Professor : public Pessoa void informaproventos(); ; #endif #ifndef _ESTAGIARIO_H_ #define _ESTAGIARIO_H_ #include "Aluno.h" class Estagiario : public Aluno void informaproventos(); ; #endif

Sobrecarga de métodos #ifndef _PESSOA_H_ #define _PESSOA_H_ class Pessoa protected: int diap; int mesp; int anop; int idadep; char nomep[30]; Pessoa(int diana, int mesna, int anona, char* nome = " "); Pessoa(); ~Pessoa(); // Sobrecarga de função NÃO é polimorfismo! void Calc_Idade(int diaat, int mesat, int anoat); void Calc_Idade(int anoat); int informaidade(); virtual void informaproventos(); ; #endif ATENÇÃO: Re-estudar sobrecarga de operadores! Pessoa::Pessoa(int diana, int mesna, int anona, char* nome) Inicializa(diaNa, mesna, anona, nome); Pessoa::Pessoa() void Pessoa::Calc_Idade(int diaat, int mesat, int anoat) idadep = anoat - anop; if ( mesp > mesat ) idadep = idadep - 1; else if ( mesp == mesat ) if ( diap > diaat ) idadep = idadep - 1; printf("\n A idade da Pessoa %s é %d \n", nomep, idadep); void Pessoa::Calc_Idade(int anoat) idadep = anoat - anop; printf("\n A idade da Pessoa %s é %d \n", nomep, idadep);

Herança Múltipla Uma classe pode herdar o conteúdo de mais de uma classe.

Exemplo #ifndef _LIVRO_H_ #define _LIVRO_H_ #include "Conhecimento.h" class Livro : public Conhecimento private: protected: char nome[150]; ; Livro ( int i = 0 ); ~Livro(); void setnome(char* n); char* getnome(); #endif #ifndef _CONHECIMENTO_H_ #define _CONHECIMENTO_H_ class Conhecimento private: protected: int id; char domino[150]; Conhecimento ( int i = 0 ); ~Conhecimento ( ); char* getdominio ( ); void setdominio ( char* d ); ; #endif #ifndef _PROFESSOR_H_ #define _PROFESSOR_H_ #include "Pessoa.h" #include "Universidade.h" #include "Conhecimento.h" class Professor : public Pessoa, public Conhecimento private: Universidade* UnivFiliado; Departamento* DptoFiliado; Professor ( int diana, int mesna, int anona, char* nome = "" ); Professor ( int i = 0 ); ~Professor(); void setunivfiliado(universidade* u); void setdepartamento(departamento* dep); void OndeTrabalho(); void QualDepartamentoTrabalho(); ; #endif

void Principal::InicializaProfessores() Pessoa* ponteiropessoa; Professor* ponteiroprofessor; Simao.Inicializa ( 3, 10, 1976, "Jean Simão" ); Einstein.Inicializa ( 14, 3, 1879, "Albert Einstein" ); Newton.Inicializa ( 4, 1, 1643, "Isaac Newton" ); void Principal::ConhecPessoa() // Conhecimento da Pessoa Simao.MeuConhecimento(); Einstein.MeuConhecimento(); Newton.MeuConhecimento(); printf("\n"); Simao.setBolsaProjeto (1000); Simao.setSalario (4000); Einstein.setSalario (25000); Newton.setSalario (25000); Simao.setUnivFiliado ( &UTFPR ); Einstein.setUnivFiliado ( &Princeton ); Newton.setUnivFiliado ( &Cambridge ); // Area de Conhecimento. Simao.setDominio("Computação"); Einstein.setDominio("Física"); Newton.setDominio("Matemática-Física");

Classe Abstrata Uma classe abstrata não pode ser intanciada (i.e. não se cria objetos a partir dela), mas pode ser derivada. Define-se uma classe abstrata por meio de pelo menos uma função virtual pura! #ifndef _CONHECIMENTO_H_ #define _CONHECIMENTO_H_ class Conhecimento private: protected: int id; char domino[150]; Conhecimento ( int i = 0 ); ~Conhecimento(); char* getdominio(); void setdominio(char* d); ; #endif virtual void informaantiguidade ( ) = 0; Uma função virtual pura não é implementável na classe em questão e deve obrigatoriamente ser implementada nas classes derivadas! #include "Conhecimento.h" #include "stdio.h" Conhecimento::Conhecimento ( int i = 0 ) id = i; Conhecimento::~Conhecimento() void Conhecimento::setDominio(char* d) strcpy(domino, d); char* Conhecimento::getDominio() return domino;

#ifndef _LIVRO_H_ #define _LIVRO_H_ #include "Conhecimento.h" class Livro : public Conhecimento private: protected: char nome[150]; int ano_impressao; Livro ( int i = 0, int ano_imp = 0 ) ; ~Livro(); ; void setnome ( char* n ); char* getnome ( ); #endif void informaantiguidade ( ); void Livro:: informaantiguidade ( ) cout << ano_impressao << endl; #ifndef _PROFESSOR_H_ #define _PROFESSOR_H_ #include "Pessoa.h" #include "Conhecimento.h" #include "Universidade.h" class Professor : public Pessoa, public Conhecimento private: Universidade* UnivFiliado; Departamento* DptoFiliado; float salario; Professor ( int diana, int mesna, int anona, char* nome = ""); Professor ( int i = 0 ); ~Professor(); void inicializa(); void setunivfiliado (Universidade* u); void setdepartamento(departamento* dep); void OndeTrabalho(); void QualDepartamentoTrabalho(); void MeuConhecimento(); void setsalario(float s); float getsalario(); void informaproventos(); void informaantiguidade ( ); ; #endif void Professor:: informaantiguidade ( ) cout << idade << endl;

Itens para estudar: Sobrecarga de operadores. Espaço de nomes (namespace). Classes Aninhadas. Classe Pré-definida String. Objetos Constantes (const). Atributos e métodos estáticos (static).