SlideShare a Scribd company logo
1 of 257
Programação Orientada para Objetos com C++ José Luiz de Souza Pio UFMG Belo Horizonte – Minas Gerais Abril de 2002
Programa ,[object Object],[object Object],[object Object],[object Object]
Introdução ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Introdução  ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Introdução ,[object Object],[object Object],[object Object],[object Object]
Introdução ,[object Object]
Introdução ,[object Object]
Introdução ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Introdução ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Introdução ,[object Object],[object Object],[object Object]
Introdução ,[object Object],[object Object],[object Object],[object Object],[object Object]
Introdução ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Introdução ,[object Object],[object Object],[object Object],[object Object],[object Object]
POO ,[object Object],[object Object],[object Object],[object Object]
POO Operações Estrutura de dados Dependência Mútua Como ficam as estruturas de dados globais?
POO Decisões de Projeto Estruturas Operações Decomposição Coloque juntas todas as decisões de projeto relacionadas
POO ,[object Object],[object Object],[object Object],[object Object]
POO ,[object Object]
Objetos e Métodos ,[object Object]
Objetos e Métodos OBJETO Dados Privados Métodos Métodos são formados por sua interface e implementação Variáveis locais a cada objeto Todos os elementos do sistema são representados por objetos que podem  ser gerados um número arbitrário de  vezes durante a execução do programa.
Métodos e Objetos ,[object Object],[object Object],[object Object],[object Object]
Métodos e Objetos ,[object Object],Círculo X, Y, Raio CalculaArea CalculaPerimetro DesenhaCirculo
Métodos e Objetos ,[object Object],[object Object]
Métodos e Objetos ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Métodos e Objetos ,[object Object],[object Object],[object Object],[object Object]
Classes, Instâncias e Mensagens ,[object Object],[object Object],[object Object]
Classes, Instâncias e Mensagens ,[object Object],[object Object]
Classes, Instâncias e Mensagens ,[object Object]
Classes, Instâncias e Mensagens ,[object Object],Nome da Classe Atributos Serviços Característica comum aos objetos descritos  pela classe Alguma operação que pode ser solicitada pelo objeto Coad & Yourdon
Classes, Instâncias e Mensagens ,[object Object],[object Object],[object Object]
Classes, Instâncias e Mensagens Motor Cabo elétrico Disco de serra Correia Serra Elétrica Serra  E létrica Martelete Furadeira Prensa
Classes, Instâncias e Mensagens ,[object Object],[object Object],[object Object]
Classes, Instâncias e Mensagens Protocolo Parte visível Parte privada Variáveis de  Instância e  métodos Classe
Classes, Instâncias e Mensagens ,[object Object],CanetaGráfica Coordenadas MoveTo LineTo
Classes, Instâncias e Mensagens Bic Paker Y X 4 20 Y X 200 10 Instâncias da classe CanetaGráfica Estado interno Variáveis de instância
Classes, Instâncias e Mensagens ,[object Object],[object Object],[object Object]
Classes, Instâncias e Mensagens ,[object Object],t = 50 Lig = TRUE Mensagem Composta por um seletor e um conjunto de parâmetros Resposta Resultado da execução do método máquina A t = 0 Lig = FALSE t = 50 Lig = TRUE máquina A Mensagem Resposta Máquina(50, TRUE)
Classes, Instâncias e Mensagens ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Classes, Instâncias e Mensagens Objeto 1 Dados Objeto n Dados Objeto 2 Dados Objeto 6 Dados Objeto 5 Dados Objeto 3 Dados Objeto 4 Dados
Encapsulamento ,[object Object],Interface Sistema Interface Parte  Privada O que o cliente vê  O que o projetista vê
Encapsulamento ,[object Object]
Encapsulamento ,[object Object],[object Object],[object Object],[object Object],[object Object]
Encapsulamento ,[object Object],[object Object],[object Object]
Encapsulamento ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Encapsulamento ,[object Object],[object Object]
Encapsulamento ,[object Object],[object Object]
Encapsulamento ,[object Object],[object Object],[object Object],[object Object]
Encapsulamento ,[object Object],[object Object],[object Object]
Herança e Polimorfismo ,[object Object]
Herança e Polimorfismo ,[object Object],[object Object],[object Object],[object Object]
Herança e Polimorfismo classe B Dados B Métodos B classe C Dados B Dados C Métodos B Métodos C
Herança e Polimorfismo superclasse subclasses Representação gráfica para a Herança Especialização
Herança e Polimorfismo ,[object Object],[object Object]
Herança e Polimorfismo A herança múltipla classe A classe B classe C Dados A Métodos A Dados B Métodos B Dados A Dados B Dados C Métodos A Métodos B Métodos C
Herança e Polimorfismo ,[object Object],[object Object]
Herança e Polimorfismo ,[object Object],[object Object]
Herança e Polimorfismo ,[object Object],[object Object]
Herança e Polimorfismo ,[object Object]
Herança e Polimorfismo ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Herança e Polimorfismo ,[object Object],[object Object],[object Object],[object Object]
Herança e Polimorfismo ,[object Object],[object Object],[object Object]
Classes e Objetos em C++
Classes e Objetos em C++ ,[object Object],[object Object]
Classes e Objetos em C++ ,[object Object]
Classes e Objetos em C++ ,[object Object]
Classes e Objetos em C++ ,[object Object]
Classes e Objetos em C++ ,[object Object]
Classes e Objetos em C++ ,[object Object],Class Tempo{ public: Time(); void SetTime(int, int, int); void PrintPadrao(); void PrintMilitar(); private: int hora; int minuto; int segundo; }; Construtor Interface de classe Só são acessados por funções membro ou friend
Classes e Objetos em C++ ,[object Object],Tempo::Tempo{ hora = 0; minuto = 0; segundo = 0; } void Time::SetTime(int h, int m, int s){ hora = (h>=0 && h < 24) ? h : 0; minuto = (m>=0 && m<60) ? m : 0; segundo =(s>=0 && s<60) ? S : 0; } void Time::PrintMilitar(){ cout << (hora<10 ? ‘’0’’ : ‘’ ‘’) <<hora << ‘’:’’   << (minuto < 10 ? ‘’0’’: ‘’ ‘’) << minuto; } Completar  Obs: Isto é um if!
Classes e Objetos em C++ ,[object Object],int main (){ Tempo t; cout<< ‘’A hora militar eh’’; t.PrintMilitar(); : : } Cria o objeto Usa a função membro
Classes e Objetos em C++ ,[object Object],[object Object],[object Object],[object Object],[object Object]
Classes e Objetos em C++ ,[object Object],[object Object],[object Object]
Classes e Objetos em C++ ,[object Object],[object Object]
Classes e Objetos em C++ class TPessoa { protected: char* pcNome; int nIdade;  public: void Anda(void); friend; }  class TAnimal { protected: char* pcNome; char* pcCientNome;  public: void Anda(void); }   void TPessoa::Anda(void) { ... }   Apesar de estar definida nas duas classes, só teremos  a implementação do método Anda de TPessoa:
Classes e Objetos em C++ ,[object Object],Tempo sunset, ArraydeTempos[5], *ptToTime;
Classes e Objetos em C++ ,[object Object],[object Object],[object Object],[object Object]
Classes e Objetos em C++ ,[object Object],[object Object],[object Object]
Classes e Objetos em C++ ,[object Object],Class Contador{ public: int x; void PrintX(){ cout << x;} }; int main(){ Contador conta; *ptConta = &conta; conta.x = 7; conta.PrintX(); ptConta->x = 8; ptConta->PrintX(); }
Classes e Objetos em C++ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Classes e Objetos em C++ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Classes e Objetos em C++ ,[object Object],[object Object],[object Object],[object Object],[object Object]
Classes e Objetos em C++ ,[object Object],void ~Tempo(int) Class Tempo{ public: Time(); void SetTime(int, int, int); void PrintPadrao(); void PrintMilitar(); private: int hora = 0; int minuto = 0; int segundo = 0; }; int Tempo(int, *int) (prototipo declarado na classe Tempo)
Classes e Objetos em C++ Exercícios de Implementação 1. Partidos políticos necessitam, principalmente neste período, de pesquisas que  mostrem as intenções de voto do eleitor. A cidade é dividida em zonas eleitorais  e você deve montar um programa que emita as estatísticas e as intenções de voto em  cada zona eleitoral.  Quais são as classes mais importantes que você vê para desenvolver  o seu programa? Detalhe e implemente a definição de uma das classes que você idealizou em C++. 2. Crie uma classe chamada Complexos para fazer aritmética de números complexos. Escreva  o programa e teste sua classe. Lembre-se que um número complexo tem a forma a+bi, onde  i = sqrt(-1). Use variáveis float para representar os dados private da classe. Forneça uma função construtora para os objetos dessa classe. As funções membro devem ser as seguintes: a) Adição de dois complexos; b) Subtração de complexos; c) Impressão de complexos na forma (a, b), onde a é a parte real e b é a parte complexa. 3. Crie uma classe Retangulo. A classe tem atributos comprimento e largura, com valor default igual a 1. Forneça as funções get e set, tanto para o comprimento quanto para a altura.
Classes e Objetos em C++
Classes e Objetos em C++ //Arquivo 1 ponto.h, definicao para a classe ponto. class ponto { public:  //daqui em diante tudo e acessivel. void inicializa(float a,float b); void mostra(void); private: float x;  //sao ocultos por default float y;  //sao ocultos por default };
Classes e Objetos em C++ //Arquivo 2 , ponto.cpp , implementacao para a classe ponto. #include <iostream.h> #include &quot;ponto.h&quot;   void ponto::inicializa(float a,float b) {  x=a; y=b; }  //as funcoes de uma classe podem acessar os atributos private dela mesma.   void ponto::mostra(void) {cout << &quot;X:&quot; << x << &quot; , Y:&quot; << y << endl;}
Classes e Objetos em C++ //Arquivo 3 . Programa principal: princ.cpp #include &quot;ponto.h&quot;   void main() { ponto ap;  //instanciacao ap.inicializa(0.0,0.0); //metodos public ap.mostra();  //metodos public
Classes e Objetos em C++ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Classes e Objetos em C++ //File easyfra.h long mdc(long n,long d); //maximo divisor comum metodo de Euclides.   class fracao { private: long num; //numerador long den; //denominador public: fracao(long t,long m);  //construtor comum void simplifica(void);  //divisao pelo mdc   ~fracao() { /* nao faz nada*/ }   //operacoes matematicas basicas fracao soma (fracao j); fracao multiplicacao(fracao j); //operacoes de comparacao int igual(fracao t); int diferente(fracao t); int maiorouigual(fracao t);   //operacoes de input output void mostra(void); //exibe fracao no video void cria(void);  //pergunta ao usuario o valor da fracao   //operacoes de conversao de tipos double convertedbl(void); //converte para double long convertelng(void); //converte para long };
Classes e Objetos em C++ //implementacao para a classe fracao. #include <iostream.h> #include &quot;easyfra.h&quot;     long mdc(long n,long d) //maximo divisor comum //metodo de Euclides . { if (n<0) n=-n; if (d<0) d=-d; while (d!=0) { long r=n % d; //%=MOD=Resto da divisao inteira. n=d; d=r; } return n; } void fracao::simplifica(void) { long commd; commd=mdc(num,den); //divisor comum num=num/commd; den=den/commd; if (den<0) { den=-den; num=-num;}; //move sinal para cima }   fracao::fracao(long t,long m) { num=(t); den=(m); simplifica();  //chamada para o mesmo objeto. }
Classes e Objetos em C++   fracao fracao::soma(fracao j) { fracao g((num*j.den)+(j.num*den),den*j.den); return g; } fracao fracao::multiplicacao(fracao j) { fracao g(num*j.num,den*j.den); return g; }     int fracao::igual(fracao t) { return ((num*t.den)==(den*t.num)); //funciona bem mesmo para nao simplificada }   int fracao::diferente(fracao t) { return ((num*t.den)!=(den*t.num)); }   int fracao::maiorouigual(fracao t) { return ((num*t.den)>=(t.num*den)); }   void fracao::mostra(void) { cout << &quot;(&quot; << num << &quot;/&quot; << den << &quot;)&quot;; }   void fracao::cria(void) { cout << &quot;Numerador:&quot;; cin >> num; cout << &quot;Denominador:&quot;; cin >> den; simplifica(); }
Classes e Objetos em C++ double fracao::convertedbl(void) { double dbl; dbl=(double(num)/double(den)); return dbl; }   //conversao para long long fracao::convertelng(void) { long lng; lng=num/den; return lng; }
Classes e Objetos em C++ #include <iostream.h> #include &quot;easyfra.h&quot; //nossa definicao da classe #include <stdio.h> main() { fracao a(0,1),b(0,1); cout << &quot; Entre com fracao a: &quot;; a.cria(); a.mostra(); cout << &quot; Entre com fracao b: &quot;; b.cria(); b.mostra(); fracao c(a.soma(b)); //c(a+b) cout << endl << &quot;c de a+b:&quot;; c.mostra(); cout << endl << &quot;a*b&quot;; c=a.multiplicacao(b); c.mostra(); cout << endl << &quot;a+b&quot;; c=a.soma(b); c.mostra(); cout << endl << &quot;a>=b&quot;; cout << a.maiorouigual(b); cout << endl << &quot;a==b&quot;; cout << a.igual(b); cout << endl << &quot;a!=b&quot;; cout << a.diferente(b); cout << endl << &quot;long(a) &quot;; cout << a.convertelng(); cout << endl << &quot;double(a) &quot;; cout << a.convertedbl(); return 0; }
Classes e Objetos em C++ #include <iostream.h> #include <math.h> //double sqrt(double x); de math.h retorna raiz quadrada do numero //double pow(double x, double y); de math.h calcula x a potencia de y   const float ZERO=0.0;   class ponto{ private: float x; //sao ocultos por default nao precisaria private mas e' bom float y; //sao ocultos por default public: //daqui em diante tudo e acessivel em main.   ponto(float a,float b) {  x=a; y=b; }   void mostra(void) const {cout << &quot;X:&quot; << x << &quot; , Y:&quot; << y << endl;}   float distancia(const ponto hi) const{ return float(  sqrt(  (  pow(double(hi.x-x),2.0) + pow(double(hi.y-y),2.0) ) )); //teorema de Pitagoras } };
Classes e Objetos em C++ void main() { ponto ap(3.0,4.0); //instanciacao ap.mostra(); //funcoes membro public const ponto origem(ZERO,ZERO); //defino objeto constante origem.mostra(); cout << &quot;Distancia da origem:&quot; << origem.distancia(ap);  }
Classes e Objetos em C++ ,[object Object],Const  pode qualificar um parâmetro de função (assegurando  que este não será modificado),  uma função membro (assegurando que esta não modifica os dados membro de sua classe), ou  uma instância de objeto/tipo (assegurando que este não será  modificado.) Os modos de qualificação descritos atuam em conjunto,  para assegurar que um objeto  const  não será modificado, C++ só  permite que sejam chamados para este objeto funções membro  qualificadas como  const
Classes e Objetos em C++ #include <iostream.h> void main() { int* a; //declara um ponteiro para endereco de variavel inteira   a=new int(3); //aloca memoria para o  apontado por a, gravando neste o valor 3   cout << (*a) << endl ; //imprime o valor do apontado por a   delete a; //desaloca memoria } Ponteiros em C++
Classes e Objetos em C++ #include <iostream.h>   class vetor_tres { public: int vet[3]; //vetor alocado estaticamente numa classe. vetor_tres(int a,int b,int c) { vet[0]=a; vet[1]=b; vet[2]=c; }   //construtor do vetor   void mostra(void) { cout << vet[0] << &quot; &quot; << vet[1] << &quot; &quot; << vet[2] << endl;} //funcao membro para mostrar o conteudo do vetor }; Alocação Estática
Classes e Objetos em C++ void main() { vetor_tres v1(1,2,3); //criacao de um objeto vetor.   vetor_tres v2(15,16,17); //criacao de um objeto vetor.   v1.mostra(); //mostrando o conteudo de v1.   v2.mostra(); //mostrando o conteudo de v2.   v2=v1; //atribuindo objeto v1 ao objeto v2.   v2.mostra(); //mostrando v2 alterado.   v1.vet[0]=44;   v1.mostra(); //mostrando o conteudo de v1.   v2.mostra(); //mostrando o conteudo de v2. }
Classes e Objetos em C++ #include <iostream.h> //vetor alocado dinamicamente void main() { int tamanho;  int* vet;  cout << &quot;Entre com o tamanho do vetor a criar&quot;; cin >> tamanho;   vet=new int[tamanho]; //alocando vetor de &quot;tamanho&quot; posicoes comecando em a[0]   for (int i=0;i<tamanho;i++) { cout << &quot;Entre com o valor da posicao &quot; << i << &quot;:&quot;; cin >> vet[i]; cout << endl; }   for (int j=0;j<tamanho;j++) { cout << &quot;Posicao &quot; << j << &quot;:&quot; << vet[j]<<endl; } } Alocação Dinâmica
Classes e Objetos em C++ //file exvet1.h //header file para classe vetor  const int inicio=0;   class vetor{ private: int* v;  //este e' o vetor int tamanho;  //tamanho maximo do vetor, public: vetor (int tam); //construtor, aloca memória para o vetor. void atribui(int index,int valor);  //altera uma posicao do vetor int conteudo(int index);  //retorna conteudo de posicao do vetor int maximo(void);  //retorna o maior elemento do vetor int primeiro(void);  //primeiro  indice do vetor int ultimo(void);  //ultimo indice do vetor ~vetor() {delete v;}  //inline function  ou use delete v[]; };   TAD Vetor
Classes e Objetos em C++ //codigo, implementacao, para o header file #include <iostream.h> #include <stdlib.h> #include &quot;exvet1.h&quot;   vetor::vetor (int tam) {v=new int[tam]; tamanho=tam;}   void vetor::atribui(int index,int valor) { if (index<tamanho && index>=inicio) v[index]=valor; } int vetor::conteudo(int index) { if (index>=tamanho || index<inicio) { cerr << &quot;Fora dos limites&quot;; exit(1);} return v[index]; } int vetor::primeiro(void) { return inicio;}   int vetor::ultimo(void) { return tamanho-1;}   int vetor:: maximo(void) {int candidato=inicio;  //candidato ao maximo for (int i=inicio;i<tamanho;i++) if (v[i]>v[candidato]) candidato=i; return v[candidato];}
Classes e Objetos em C++ //programa pricipal #include <iostream.h> #include &quot;exvet1.h&quot;   main() { int aux;  //para ler valor a atribuir vetor meu(5); for (int i=meu.primeiro();i<=meu.ultimo();i++) { cout << &quot;Entre com valor da posicao:&quot; << i << &quot;&quot;; cin >> aux; meu.atribui(i,aux); } for (int j=meu.primeiro();j<=meu.ultimo();j++) cout<< meu.conteudo(j)<< &quot; &quot;; cout <<endl << &quot;Maximo:&quot; << meu.maximo(); return 0; }
Projeto de Programas OO ,[object Object],[object Object]
Projeto de Programas OO ,[object Object],[object Object],[object Object],[object Object]
Projeto de Programas OO ,[object Object],[object Object],[object Object],[object Object]
Projeto de Programas OO ,[object Object],[object Object],[object Object],[object Object],[object Object]
Projeto de Programas OO ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Projeto de Programas OO ,[object Object]
Projeto de Programas OO ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Projeto de Programas OO ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Projeto de Programas OO ,[object Object],[object Object],[object Object],[object Object]
Projeto de Programas OO ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Projeto de Programas OO ,[object Object],[object Object],[object Object],[object Object],[object Object]
Projeto de Programas OO ,[object Object],[object Object],[object Object],Aluno Disciplina
Projeto de Programas OO ,[object Object],[object Object],[object Object],[object Object]
Projeto de Programas OO Classe A Classe B Classe A Classe B ou unidirecional bidirecional Classe A Classe B bidirecional ou  não determinada
Projeto de Programas OO Para facilitar seu entendimento, uma associação precisa ser nomeada - O nome é representado como um “rótulo” colocado  ao longo da linha de associação - Um nome de associação é usualmente um verbo ou uma frase verbal Aluno Dsiciplina Cursa
Projeto de Programas OO Aluno Disciplina cursa tem matriculado Aluno Disciplina Cursa   Tem matriculado
Projeto de Programas OO ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Projeto de Programas OO Muitos  * Exatamente um  1 Zero ou mais  0.. *   Um ou mais  1.. * Zero ou um  0..1 Faixa especificada  2..4 Pessoa Disciplina Aluno 1..* 1.. *
Projeto de Programas OO ,[object Object],[object Object],[object Object],[object Object]
Projeto de Programas OO class TCliente { protected: int nClientCod; char* pcNome; char* pcEndereco; int* nProdCod;   //array de inteiros com todos os produtos que possui   public: ... }  class TProduto { protected: int nProdCod; char* pcDescri;  public: ... }  Uma instância de  Cliente  sabe todos os  Produtos que possui
Projeto de Programas OO class TCliente { protected: int nClientCod; char* pcNome; char* pcEndereco;  public: ... }  class TProduto { protected: int nProdCod; char* pcDescri; int nClientCod;  //qual cliente o possui public: ... }   Uma instância de Produto sabe qual o Cliente a possui
Projeto de Programas OO ,[object Object]
Projeto de Programas OO class TAluno { protected: char* pcDRE; char** pacMatricula;  //matriculas dos professores que possui char* pcNome; int nIdade;  public: ... }  class TProfessor { protected: char* pcMatricula; char*pcNome; char** pacDRE;   //array de strings com DRE dos alunos que possui   public: ... }
Projeto de Programas OO
Projeto de Programas OO ,[object Object],[object Object],[object Object]
Projeto de Programas OO ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Projeto de Programas OO Todo Parte1 Parte2
Projeto de Programas OO Turma Aluno 1..* *
Projeto de Programas OO ,[object Object],[object Object],[object Object],[object Object]
Projeto de Programas OO Departamento * Disciplina
Projeto de Programas OO ,[object Object],[object Object],[object Object],[object Object],[object Object]
Projeto de Programas OO Curso 1..* 0.. * Disciplina Aluno 3..10 Curso e disciplina são altamente acoplados (1 curso é formado por 1 ou mais disciplinas) Objetos independentes
Projeto de Programas OO ,[object Object],[object Object],[object Object],[object Object],[object Object]
Projeto de Programas OO ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Projeto de Programas OO Atributos Nome do objeto Operações Unidades organizacionais Estrutura Lugar Entidades externas Papéis Eventos Coisas
Projeto de Programas OO ,[object Object],[object Object],[object Object],[object Object]
Projeto de Programas OO ,[object Object],[object Object],[object Object],[object Object]
Projeto de Programas OO ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Projeto de Programas OO ,[object Object],[object Object],[object Object]
Projeto de Programas OO ,[object Object],[object Object],[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object],[object Object],Raramente utilizado
Herança e Polimorfismo em C++ Herança Pública: Na herança pública as classes filhas passam a ter as  mesmas funções membro  public  da classe pai, as classes filhas  podem acrescentar funções membro, dados membro e até redefinir funções membro herdadas . Os atributos da classe pai não são acessíveis diretamente na classe filha a não ser que sejam  qualificados como  protected . Por isso é que se diz que  as classes filhas garantem pelo menos o comportamento  da classe pai, podendo acrescentar mais características.
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ Construtores e herança: No construtor de uma classe filha o programador pode  incluir a chamada do construtor da classe pai.   Destrutores e herança:  Quando um objeto da classe derivada é destruído, o  destrutor da classe pai também é chamado dando a oportunidade  de liberar a memória ocupada pelos atributos private da classe pai.
Herança e Polimorfismo em C++ ,[object Object]
Herança e Polimorfismo em C++ Tipo de acesso original na  Classe base Tipo de acesso resultante na classe derivada Tipo de herança Não acess. Private Private Private Não acess. Protected Public Public Private Protected Public
Herança e Polimorfismo em C++ Exemplo
Herança e Polimorfismo em C++ //header file class ponto { private: float x;  float y;  public. ponto(float a,float b); void inicializa(float a,float b); float retorna_x(void); float retorna_y(void); void altera_x(float a); void altera_y(float b); void mostra(void); }; class ponto_reflete:public ponto  { private:  //se voce quer adicionar atributos... public: ponto_reflete(float a, float b); void reflete(void);  };   class ponto_move:public ponto { public: ponto_move(float a,float b); void move(float dx,float dy); };
Herança e Polimorfismo em C++ //implementation file #include <iostream.h> #include &quot;pontos.h&quot;   ponto::ponto(float a,float b) { inicializa(a,b); }   void ponto::inicializa(float a,float b) { x=a; y=b; }   float ponto::retorna_x(void) { return x; }   float ponto::retorna_y(void) { return y; }   void ponto::altera_x(float a) { x=a; }   void ponto::altera_y(float b) { y=b; }   void ponto::mostra(void) { cout << &quot;(&quot; << x << &quot;,&quot; << y << &quot;)&quot; <<endl; }  
Herança e Polimorfismo em C++ ponto_reflete::ponto_reflete(float a,float b):ponto(a,b) { }   void ponto_reflete::reflete(void) { altera_x(-retorna_x()); altera_y(-retorna_y()); }   ponto_move::ponto_move(float a,float b):ponto(a,b) { }   void ponto_move::move(float dx,float dy) { altera_x(retorna_x()+dx); altera_y(retorna_y()+dy); }
Herança e Polimorfismo em C++ #include <iostream.h> #include &quot;pontos.h&quot;   void main() { ponto_reflete p1(3.14,2.17); p1.reflete(); cout << &quot;P1&quot;; p1.mostra();   ponto_move p2(1.0,1.0); p2.move(.5,.5); cout << &quot;P2&quot;; p2.mostra(); } Resultado do programa: P1(-3.14,-2.17) P2(1.5,1.5)
Herança e Polimorfismo em C++ Herança Private: class herdeira: private nome_classe_base;  As funções membro desta classe base só são acessíveis dentro  das declarações da classe filha, ou seja a classe filha não atende  por essas funções membro, mas pode usá-las em seu código. Normalmente, quando se usa herança dizemos que a classe  filha garante no mínimo o comportamento da classe pai  (em termos de funções membro) , a herança  private  pode invalidar  esta premissa.
Herança e Polimorfismo em C++ protected  deixa os atributos da classe pai visíveis,  acessíveis “hierarquia abaixo”. O uso de protected serve como um nível intermediário de proteção entre o acesso public e o private. Membros  protected da classe podem ser acessados por membros friends Da classe base e por membros friend das classes derivadas; Nenhuma outra função pode acessar membros protected de uma Classe base.
Herança e Polimorfismo em C++ ,[object Object],[object Object]
Herança e Polimorfismo em C++ ponto_reflete  redefine a função membro  mostra  da classe pai,  enquanto que a classe herdeira  ponto_move  aceita a definição  da função membro  mostra  dada pela classe  ponto  que é sua  classe pai.
Herança e Polimorfismo em C++ //header file class ponto { private: float x;  //sao ocultos por default float y;  //sao ocultos por default public:  //daqui em diante tudo e acessivel. ponto(float a,float b); void inicializa(float a,float b); float retorna_x(void); float retorna_y(void); void altera_x(float a); void altera_y(float b); void mostra(void); }; class ponto_reflete:public ponto { private:  //se voce quer adicionar dados membro public: ponto_reflete(float a, float b); void reflete(void); void mostra(void);  //redefinicao };   class ponto_move:public ponto { public: ponto_move(float a,float b); void move(float dx,float dy); //esta classe filha nao redefine mostra };
Herança e Polimorfismo em C++ //implementation file #include <iostream.h> #include &quot;pontos.h&quot;   ponto::ponto(float a,float b){ inicializa(a,b); }   void ponto::inicializa(float a,float b){ x=a; y=b; }   float ponto::retorna_x(void) { return x; }   float ponto::retorna_y(void) { return y; }   void ponto::altera_x(float a) { x=a; }   void ponto::altera_y(float b) { y=b; } void ponto::mostra(void){ cout << &quot;(&quot; << x << &quot;,&quot; << y << &quot;)&quot; <<endl; }   ponto_reflete::ponto_reflete(float a,float b):ponto(a,b) { }   void ponto_reflete::reflete(void){ altera_x(-retorna_x()); altera_y(-retorna_y()); } void ponto_reflete::mostra(void) { cout << &quot;X:&quot; << retorna_x() << &quot; Y:&quot;; cout << retorna_y() << endl;  } //somente altera o formato de impressao ponto_move::ponto_move(float a,float b):ponto(a,b) { } void ponto_move::move(float dx,float dy) { altera_x(retorna_x()+dx); altera_y(retorna_y()+dy); }
Herança e Polimorfismo em C++ #include <iostream.h> #include &quot;pontos.h&quot;   void main() { ponto_reflete p1(3.14,2.17); p1.reflete(); cout << &quot;P1&quot;; p1.mostra();   ponto_move p2(1.0,1.0); p2.move(.5,.5); cout << &quot;P2&quot;; p2.mostra();   } Resultado do programa: P1X:-3.14 Y:-2.17 P2(1.5,1.5)
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ #include<iostream.h> class Base{ public: virtual void vfunc(){ cout<<“esta  e vfunc() da base ”; } }; class Derivada1:public base{ public: void vfunc(){ cout<<“esta e vfunc() da derivada1 ”; } }; class Derivada2:public base{ public: void vfunc(){ cout <<“esta e vfunc() da derivada2 ”; } };
Herança e Polimorfismo em C++ main(){ Base *p, b; Derivada1 d1; Derivada2 d2; p = &b; p->vfunc(); p = &d1; p->vfunc(); p = &d2; p->vfunc(); Return 0; }
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object]
Herança e Polimorfismo em C++ ,[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object]
Herança e Polimorfismo em C++ //header file funcover.h float abs(float a); int abs(int a); //implementation file #include &quot;funcover.h&quot;   float abs(float a) { if (a>0.0) return a; else return -a; }   int abs(int a) { if (a>0) return a; else return -a; }   #include <iostream.h> #include &quot;funcover.h&quot; void main(){ int i1; float f1; cout << abs(int(-10))<<endl; cout << abs(float(-10.1))<<endl; f1=-9.1; i1=8.0; cout << abs(f1) << endl; cout << abs(i1) << endl; }
Herança e Polimorfismo em C++ ,[object Object],//header file funcover.h float max(float a,float b); float max(float a,float b,float c); int max(int a,int b);   #include &quot;funcover.h&quot;   float max(float a,float b){ if (a>b) return a; else return b; }   float max(float a,float b,float c){ if (a>b) return max(a,c); else return max(b,c); }   int max(int a,int b){ if (a>b) return a; else return b; }
Herança e Polimorfismo em C++ #include <iostream.h> #include &quot;funcover.h&quot;   void main() { cout << max(float(1.2),float(3.4),float(2.1))<<endl; cout << max(float(1.5),float(.65)) << endl; cout << max(int(12),int(120)); }
Herança e Polimorfismo em C++ ,[object Object],//header file para classe vetor: vet.h #include <iostream.h> #include <stdlib.h> //exit(1)   const int inicio=0; //inicio do vetor   class vetor{ private: float* v;  //pode ser qualquer tipo que atenda as operacoes < > = int tamanho; public: vetor (int tamanho) ; float& operator[] (int i); float maximo();  //acha o valor maximo do vetor int primeiro(void); int ultimo(void); };
Herança e Polimorfismo em C++ vetor::vetor (int tam) {v=new float[tam]; tamanho=tam;}   int vetor::primeiro (void) {return inicio;}   int vetor::ultimo (void) {return tamanho-1;} float& vetor::operator[](int i){ if (i<0 || i>=tamanho) {cout << &quot;Fora dos limites! Exit program&quot;; exit(1);} return v[i]; } float vetor:: maximo(void) {int candidato=inicio; for (int i=inicio;i<tamanho;i++) if (v[i]>v[candidato]) candidato=i; return v[candidato];}
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object]
Herança e Polimorfismo em C++ //exvetit6 , arquivo com definicoes do iterador. class iterador{  //classe base abstrata public: int comeca(void) {cout << &quot;Erro, classe abstrata!&quot;;} float operator()() {cout << &quot;Erro, classe abstrata!&quot;; return 0;} int operator!(void) {return 0;} int operator ++() {return 0;} void operator=(float entra) {;} };   class iteradorvetor:public iterador { private: vetor vetorref; int posicao; //classe filha acrescentando dados membro public: iteradorvetor(vetor & v); int comeca(); int operator!(); int operator ++ (); float operator() (); void operator= (float entra); int pos();
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object]
Herança e Polimorfismo em C++ #include <iostream.h>   class relogio { friend class caixa_de_mensagem; //permitiu acesso as definicoes private e public private: int hora; int minuto; int segundo; //atributos private, encapsulados public: relogio(int h,int m,int s) {hora=h; minuto=m; segundo=s;} } ;
Herança e Polimorfismo em C++ class caixa_de_mensagem{ public: void imprime(relogio a){ cout << a.hora << &quot;:&quot; << a.minuto << &quot;:&quot; << a.segundo << endl; } } ;   void main(){ relogio meurolex(11,30,10); caixa_de_mensagem ativa; ativa.imprime(meurolex); }
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object]
Herança e Polimorfismo em C++ template  < class  T >   class  Vector {  T  * data;  int  size;  public :  Vector( int );  ~ Vector() {  delete  [] data; }  T&  operator [] ( int  i) {  return  data[i]; }  };  // observe a sintaxe para definicao fora da classe   template  < class  T >   Vector <  T >  ::Vector( int  n) {  data =  new  T[n];  size = n;
Herança e Polimorfismo em C++ // exemplo de declaracao   main () {  Vector  <int>   ix(5);  // gera um vetor de inteiros   Vector  <float>   fx(6);  // gera vetor de floats   //...   }
Herança e Polimorfismo em C++ ,[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object],[object Object],[object Object]
Herança e Polimorfismo em C++ ,[object Object]
E/S com streams em C++ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
E/S com streams em C++ ,[object Object],[object Object],[object Object],[object Object]
E/S com streams em C++ ,[object Object],[object Object],[object Object],[object Object],[object Object]
E/S com streams em C++ ,[object Object],[object Object],[object Object],[object Object],[object Object]
E/S com streams em C++ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
E/S com streams em C++ ,[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Programação C++ ,[object Object],[object Object],[object Object]
Programação C++ ,[object Object],[object Object]
Programação em C++ ,[object Object],[object Object]
Programação em C++ ,[object Object]
Programação em C++ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Programação em C++ ,[object Object]
Programação em C++ ,[object Object],[object Object],[object Object]
Programação em C++ ,[object Object],[object Object],[object Object],[object Object]
Programação em C++ ,[object Object],[object Object],[object Object],[object Object],[object Object]
Programação em C++ ,[object Object],[object Object],[object Object],[object Object]
Programação em C++ ,[object Object],[object Object],[object Object],[object Object]
Programa
Programação OO com C++ conceitos básicos
Programação OO com C++ conceitos básicos
Programação OO com C++ conceitos básicos
Programação OO com C++ conceitos básicos
Programação OO com C++ conceitos básicos

More Related Content

What's hot

Aula c++ estruturas de dados
Aula c++   estruturas de dadosAula c++   estruturas de dados
Aula c++ estruturas de dadosJean Martina
 
Apostila Algoritmos e Estrutura de Dados (AEDS)
Apostila Algoritmos e Estrutura de Dados (AEDS)Apostila Algoritmos e Estrutura de Dados (AEDS)
Apostila Algoritmos e Estrutura de Dados (AEDS)Ricardo Terra
 
Microsserviços com Spring Boot e ORM
Microsserviços com Spring Boot e ORMMicrosserviços com Spring Boot e ORM
Microsserviços com Spring Boot e ORMRicardo Terra
 
Estrutura de Dados - Aula Revisão para 1ª Avaliação
Estrutura de Dados - Aula Revisão para 1ª AvaliaçãoEstrutura de Dados - Aula Revisão para 1ª Avaliação
Estrutura de Dados - Aula Revisão para 1ª AvaliaçãoLeinylson Fontinele
 
Estrutura de Dados Aula 12 - Listas Duplamente Encadeadas
Estrutura de Dados Aula 12 - Listas Duplamente EncadeadasEstrutura de Dados Aula 12 - Listas Duplamente Encadeadas
Estrutura de Dados Aula 12 - Listas Duplamente EncadeadasLeinylson Fontinele
 
Estrutura de Dados - Aula 02
Estrutura de Dados - Aula 02Estrutura de Dados - Aula 02
Estrutura de Dados - Aula 02thomasdacosta
 
Laboratório de Programação II: Tipo Abstrato de Dados (TAD)
Laboratório de Programação II: Tipo Abstrato de Dados (TAD)Laboratório de Programação II: Tipo Abstrato de Dados (TAD)
Laboratório de Programação II: Tipo Abstrato de Dados (TAD)Alex Camargo
 
Java Net: Interagindo com a Internet
Java Net: Interagindo com a InternetJava Net: Interagindo com a Internet
Java Net: Interagindo com a InternetRicardo Terra
 
Estrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentaisEstrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentaisFabrício Lopes Sanchez
 
Apostila Lógica de Programação
Apostila Lógica de ProgramaçãoApostila Lógica de Programação
Apostila Lógica de ProgramaçãoRicardo Terra
 
Estruturas de dados com C++ e STL
Estruturas de dados com C++ e STLEstruturas de dados com C++ e STL
Estruturas de dados com C++ e STLMarcos Castro
 
Curso matlab 6 especiais
Curso matlab 6 especiaisCurso matlab 6 especiais
Curso matlab 6 especiaisJosh Santos
 
Curso Básico de Java - Aula 7
Curso Básico de Java - Aula 7Curso Básico de Java - Aula 7
Curso Básico de Java - Aula 7PeslPinguim
 

What's hot (20)

Aula c++ estruturas de dados
Aula c++   estruturas de dadosAula c++   estruturas de dados
Aula c++ estruturas de dados
 
Apostila Algoritmos e Estrutura de Dados (AEDS)
Apostila Algoritmos e Estrutura de Dados (AEDS)Apostila Algoritmos e Estrutura de Dados (AEDS)
Apostila Algoritmos e Estrutura de Dados (AEDS)
 
Apostila C ANSI
Apostila C ANSIApostila C ANSI
Apostila C ANSI
 
Apostila Oracle
Apostila OracleApostila Oracle
Apostila Oracle
 
Microsserviços com Spring Boot e ORM
Microsserviços com Spring Boot e ORMMicrosserviços com Spring Boot e ORM
Microsserviços com Spring Boot e ORM
 
Estrutura de Dados - Aula Revisão para 1ª Avaliação
Estrutura de Dados - Aula Revisão para 1ª AvaliaçãoEstrutura de Dados - Aula Revisão para 1ª Avaliação
Estrutura de Dados - Aula Revisão para 1ª Avaliação
 
Estrutura de Dados Aula 12 - Listas Duplamente Encadeadas
Estrutura de Dados Aula 12 - Listas Duplamente EncadeadasEstrutura de Dados Aula 12 - Listas Duplamente Encadeadas
Estrutura de Dados Aula 12 - Listas Duplamente Encadeadas
 
Estrutura de Dados - Aula 02
Estrutura de Dados - Aula 02Estrutura de Dados - Aula 02
Estrutura de Dados - Aula 02
 
Pged 03
Pged 03Pged 03
Pged 03
 
Tipos Abstratos de Dados e Encapsulamento
Tipos Abstratos de Dados e EncapsulamentoTipos Abstratos de Dados e Encapsulamento
Tipos Abstratos de Dados e Encapsulamento
 
Laboratório de Programação II: Tipo Abstrato de Dados (TAD)
Laboratório de Programação II: Tipo Abstrato de Dados (TAD)Laboratório de Programação II: Tipo Abstrato de Dados (TAD)
Laboratório de Programação II: Tipo Abstrato de Dados (TAD)
 
Java Net: Interagindo com a Internet
Java Net: Interagindo com a InternetJava Net: Interagindo com a Internet
Java Net: Interagindo com a Internet
 
Estrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentaisEstrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentais
 
Apostila Lógica de Programação
Apostila Lógica de ProgramaçãoApostila Lógica de Programação
Apostila Lógica de Programação
 
Apostila UML
Apostila UMLApostila UML
Apostila UML
 
Estruturas de dados com C++ e STL
Estruturas de dados com C++ e STLEstruturas de dados com C++ e STL
Estruturas de dados com C++ e STL
 
Curso matlab 6 especiais
Curso matlab 6 especiaisCurso matlab 6 especiais
Curso matlab 6 especiais
 
Curso Básico de Java - Aula 7
Curso Básico de Java - Aula 7Curso Básico de Java - Aula 7
Curso Básico de Java - Aula 7
 
Introdução à Estrutura de Dados
Introdução à Estrutura de DadosIntrodução à Estrutura de Dados
Introdução à Estrutura de Dados
 
Estruturas
EstruturasEstruturas
Estruturas
 

Viewers also liked

TRABALHO PARADIGMAS - C++
TRABALHO PARADIGMAS - C++TRABALHO PARADIGMAS - C++
TRABALHO PARADIGMAS - C++Ellen Diana
 
Aula 01 - Começando a programar em PHP
Aula 01 - Começando a programar em PHPAula 01 - Começando a programar em PHP
Aula 01 - Começando a programar em PHPEvandro Júnior
 
Open4Education | MC59 - Aprendendo a programar de forma divertida e eficiente...
Open4Education | MC59 - Aprendendo a programar de forma divertida e eficiente...Open4Education | MC59 - Aprendendo a programar de forma divertida e eficiente...
Open4Education | MC59 - Aprendendo a programar de forma divertida e eficiente...tdc-globalcode
 
Álgebra Linear Para Leigos
Álgebra Linear Para LeigosÁlgebra Linear Para Leigos
Álgebra Linear Para LeigosJúlio Alexandre
 
Álgebra linear e geometria analítica 2ª edição
Álgebra linear e geometria analítica 2ª ediçãoÁlgebra linear e geometria analítica 2ª edição
Álgebra linear e geometria analítica 2ª ediçãoRangel Victor
 

Viewers also liked (10)

Revista programar 20
Revista programar 20Revista programar 20
Revista programar 20
 
Slideslaza
SlideslazaSlideslaza
Slideslaza
 
599026
599026599026
599026
 
Aula1 c++ builder
Aula1   c++ builderAula1   c++ builder
Aula1 c++ builder
 
TRABALHO PARADIGMAS - C++
TRABALHO PARADIGMAS - C++TRABALHO PARADIGMAS - C++
TRABALHO PARADIGMAS - C++
 
Aula 01 - Começando a programar em PHP
Aula 01 - Começando a programar em PHPAula 01 - Começando a programar em PHP
Aula 01 - Começando a programar em PHP
 
Open4Education | MC59 - Aprendendo a programar de forma divertida e eficiente...
Open4Education | MC59 - Aprendendo a programar de forma divertida e eficiente...Open4Education | MC59 - Aprendendo a programar de forma divertida e eficiente...
Open4Education | MC59 - Aprendendo a programar de forma divertida e eficiente...
 
Apostila C++
Apostila C++ Apostila C++
Apostila C++
 
Álgebra Linear Para Leigos
Álgebra Linear Para LeigosÁlgebra Linear Para Leigos
Álgebra Linear Para Leigos
 
Álgebra linear e geometria analítica 2ª edição
Álgebra linear e geometria analítica 2ª ediçãoÁlgebra linear e geometria analítica 2ª edição
Álgebra linear e geometria analítica 2ª edição
 

Similar to Programação OO com C++ conceitos básicos

Modelagem de sistemas
Modelagem de sistemasModelagem de sistemas
Modelagem de sistemassauloroos01
 
Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Luis Ferreira
 
pec-12-patterns-intro.ppt
pec-12-patterns-intro.pptpec-12-patterns-intro.ppt
pec-12-patterns-intro.pptssuser7025cf
 
Poo apostila visual c
Poo apostila visual cPoo apostila visual c
Poo apostila visual cFabiano Lima
 
Umlv4 090813182632-phpapp02
Umlv4 090813182632-phpapp02Umlv4 090813182632-phpapp02
Umlv4 090813182632-phpapp02Jhonefj
 
IES GF - Introdução a Linguagem de Programação Orientada a Objetos
IES GF - Introdução a Linguagem de Programação Orientada a ObjetosIES GF - Introdução a Linguagem de Programação Orientada a Objetos
IES GF - Introdução a Linguagem de Programação Orientada a ObjetosRamon Mayor Martins
 
Conceitos Básicos Sobre Analise de Sistemas
Conceitos Básicos Sobre Analise de SistemasConceitos Básicos Sobre Analise de Sistemas
Conceitos Básicos Sobre Analise de SistemasClayton de Almeida Souza
 
Aula 1 - Linguagem III
Aula 1 - Linguagem IIIAula 1 - Linguagem III
Aula 1 - Linguagem IIIJuliano Weber
 
Integração de Tecnologias
Integração de TecnologiasIntegração de Tecnologias
Integração de Tecnologiaselliando dias
 
Apresentação Introdução Design Patterns
Apresentação Introdução Design PatternsApresentação Introdução Design Patterns
Apresentação Introdução Design PatternsLucas Simões Maistro
 
Logica de Programação Vitor Jose de Souza.pptx
Logica de Programação Vitor Jose de Souza.pptxLogica de Programação Vitor Jose de Souza.pptx
Logica de Programação Vitor Jose de Souza.pptxJoseVitorSantanadeMe
 
Linguagens de programação 12º M11
Linguagens de programação 12º M11Linguagens de programação 12º M11
Linguagens de programação 12º M11Luis Ferreira
 

Similar to Programação OO com C++ conceitos básicos (20)

Sld 4
Sld 4Sld 4
Sld 4
 
Modelagem de sistemas
Modelagem de sistemasModelagem de sistemas
Modelagem de sistemas
 
Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos
 
pec-12-patterns-intro.ppt
pec-12-patterns-intro.pptpec-12-patterns-intro.ppt
pec-12-patterns-intro.ppt
 
Artigo c#
Artigo c#Artigo c#
Artigo c#
 
Poo apostila visual c
Poo apostila visual cPoo apostila visual c
Poo apostila visual c
 
Projeto de Software
Projeto de SoftwareProjeto de Software
Projeto de Software
 
Padrões de Projeto de Software
Padrões de Projeto de SoftwarePadrões de Projeto de Software
Padrões de Projeto de Software
 
Umlv4 090813182632-phpapp02
Umlv4 090813182632-phpapp02Umlv4 090813182632-phpapp02
Umlv4 090813182632-phpapp02
 
IES GF - Introdução a Linguagem de Programação Orientada a Objetos
IES GF - Introdução a Linguagem de Programação Orientada a ObjetosIES GF - Introdução a Linguagem de Programação Orientada a Objetos
IES GF - Introdução a Linguagem de Programação Orientada a Objetos
 
Conceitos Básicos Sobre Analise de Sistemas
Conceitos Básicos Sobre Analise de SistemasConceitos Básicos Sobre Analise de Sistemas
Conceitos Básicos Sobre Analise de Sistemas
 
Aula 1 - Linguagem III
Aula 1 - Linguagem IIIAula 1 - Linguagem III
Aula 1 - Linguagem III
 
Integração de Tecnologias
Integração de TecnologiasIntegração de Tecnologias
Integração de Tecnologias
 
3 oo-concepts
3 oo-concepts3 oo-concepts
3 oo-concepts
 
Aula 3 -_fundamentos_sobre_aoo
Aula 3 -_fundamentos_sobre_aooAula 3 -_fundamentos_sobre_aoo
Aula 3 -_fundamentos_sobre_aoo
 
Aula1
Aula1Aula1
Aula1
 
Apresentação Introdução Design Patterns
Apresentação Introdução Design PatternsApresentação Introdução Design Patterns
Apresentação Introdução Design Patterns
 
Logica de Programação Vitor Jose de Souza.pptx
Logica de Programação Vitor Jose de Souza.pptxLogica de Programação Vitor Jose de Souza.pptx
Logica de Programação Vitor Jose de Souza.pptx
 
Linguagens de programação 12º M11
Linguagens de programação 12º M11Linguagens de programação 12º M11
Linguagens de programação 12º M11
 
Naked Objects
Naked ObjectsNaked Objects
Naked Objects
 

More from taniamaciel

CóPia De Mesa Redonda C O N A R
CóPia De Mesa Redonda  C O N A RCóPia De Mesa Redonda  C O N A R
CóPia De Mesa Redonda C O N A Rtaniamaciel
 
A D M I N I S T R AÇÃ O
A D M I N I S T R AÇÃ OA D M I N I S T R AÇÃ O
A D M I N I S T R AÇÃ Otaniamaciel
 
CóPia De Aula2 Timkt
CóPia De Aula2 TimktCóPia De Aula2 Timkt
CóPia De Aula2 Timkttaniamaciel
 
S R A Bernadete MotivaçãO
S R A  Bernadete    MotivaçãOS R A  Bernadete    MotivaçãO
S R A Bernadete MotivaçãOtaniamaciel
 
O Controle Jurisdicional
O Controle JurisdicionalO Controle Jurisdicional
O Controle Jurisdicionaltaniamaciel
 
CóPia De O Controle Jurisdicional
CóPia De O Controle JurisdicionalCóPia De O Controle Jurisdicional
CóPia De O Controle Jurisdicionaltaniamaciel
 
CóPia De Nourau
CóPia De NourauCóPia De Nourau
CóPia De Nourautaniamaciel
 
011205 Palestradoccontabilidade
011205 Palestradoccontabilidade011205 Palestradoccontabilidade
011205 Palestradoccontabilidadetaniamaciel
 
Aneel A Realidade Brasileira No Caminho Da Sustentabilidade E Rs Livio Giosa
Aneel   A Realidade Brasileira No Caminho Da Sustentabilidade E Rs Livio GiosaAneel   A Realidade Brasileira No Caminho Da Sustentabilidade E Rs Livio Giosa
Aneel A Realidade Brasileira No Caminho Da Sustentabilidade E Rs Livio Giosataniamaciel
 
Dho ApresentaçãO
Dho ApresentaçãODho ApresentaçãO
Dho ApresentaçãOtaniamaciel
 
Marketing Na Internet 9525
Marketing Na Internet 9525Marketing Na Internet 9525
Marketing Na Internet 9525taniamaciel
 
Mesa Redonda Conar
Mesa Redonda ConarMesa Redonda Conar
Mesa Redonda Conartaniamaciel
 
Palestra De Rs E 3º Setor 30.05.07
Palestra De Rs E 3º Setor   30.05.07Palestra De Rs E 3º Setor   30.05.07
Palestra De Rs E 3º Setor 30.05.07taniamaciel
 
Palestra Motivacao Humana
Palestra Motivacao HumanaPalestra Motivacao Humana
Palestra Motivacao Humanataniamaciel
 

More from taniamaciel (20)

CóPia De Mesa Redonda C O N A R
CóPia De Mesa Redonda  C O N A RCóPia De Mesa Redonda  C O N A R
CóPia De Mesa Redonda C O N A R
 
A D M I N I S T R AÇÃ O
A D M I N I S T R AÇÃ OA D M I N I S T R AÇÃ O
A D M I N I S T R AÇÃ O
 
CóPia De Aula2 Timkt
CóPia De Aula2 TimktCóPia De Aula2 Timkt
CóPia De Aula2 Timkt
 
S R A Bernadete MotivaçãO
S R A  Bernadete    MotivaçãOS R A  Bernadete    MotivaçãO
S R A Bernadete MotivaçãO
 
O Controle Jurisdicional
O Controle JurisdicionalO Controle Jurisdicional
O Controle Jurisdicional
 
CóPia De O Controle Jurisdicional
CóPia De O Controle JurisdicionalCóPia De O Controle Jurisdicional
CóPia De O Controle Jurisdicional
 
CóPia De Nourau
CóPia De NourauCóPia De Nourau
CóPia De Nourau
 
Amazonia2776
Amazonia2776Amazonia2776
Amazonia2776
 
011205 Palestradoccontabilidade
011205 Palestradoccontabilidade011205 Palestradoccontabilidade
011205 Palestradoccontabilidade
 
1219189349
12191893491219189349
1219189349
 
Cap8 001
Cap8 001Cap8 001
Cap8 001
 
Marcos
MarcosMarcos
Marcos
 
Motiva12
Motiva12Motiva12
Motiva12
 
Aneel A Realidade Brasileira No Caminho Da Sustentabilidade E Rs Livio Giosa
Aneel   A Realidade Brasileira No Caminho Da Sustentabilidade E Rs Livio GiosaAneel   A Realidade Brasileira No Caminho Da Sustentabilidade E Rs Livio Giosa
Aneel A Realidade Brasileira No Caminho Da Sustentabilidade E Rs Livio Giosa
 
Dho ApresentaçãO
Dho ApresentaçãODho ApresentaçãO
Dho ApresentaçãO
 
Marketing Na Internet 9525
Marketing Na Internet 9525Marketing Na Internet 9525
Marketing Na Internet 9525
 
Mesa Redonda Conar
Mesa Redonda ConarMesa Redonda Conar
Mesa Redonda Conar
 
Motivacao
MotivacaoMotivacao
Motivacao
 
Palestra De Rs E 3º Setor 30.05.07
Palestra De Rs E 3º Setor   30.05.07Palestra De Rs E 3º Setor   30.05.07
Palestra De Rs E 3º Setor 30.05.07
 
Palestra Motivacao Humana
Palestra Motivacao HumanaPalestra Motivacao Humana
Palestra Motivacao Humana
 

Programação OO com C++ conceitos básicos

  • 1. Programação Orientada para Objetos com C++ José Luiz de Souza Pio UFMG Belo Horizonte – Minas Gerais Abril de 2002
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15. POO Operações Estrutura de dados Dependência Mútua Como ficam as estruturas de dados globais?
  • 16. POO Decisões de Projeto Estruturas Operações Decomposição Coloque juntas todas as decisões de projeto relacionadas
  • 17.
  • 18.
  • 19.
  • 20. Objetos e Métodos OBJETO Dados Privados Métodos Métodos são formados por sua interface e implementação Variáveis locais a cada objeto Todos os elementos do sistema são representados por objetos que podem ser gerados um número arbitrário de vezes durante a execução do programa.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31. Classes, Instâncias e Mensagens Motor Cabo elétrico Disco de serra Correia Serra Elétrica Serra E létrica Martelete Furadeira Prensa
  • 32.
  • 33. Classes, Instâncias e Mensagens Protocolo Parte visível Parte privada Variáveis de Instância e métodos Classe
  • 34.
  • 35. Classes, Instâncias e Mensagens Bic Paker Y X 4 20 Y X 200 10 Instâncias da classe CanetaGráfica Estado interno Variáveis de instância
  • 36.
  • 37.
  • 38.
  • 39. Classes, Instâncias e Mensagens Objeto 1 Dados Objeto n Dados Objeto 2 Dados Objeto 6 Dados Objeto 5 Dados Objeto 3 Dados Objeto 4 Dados
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51. Herança e Polimorfismo classe B Dados B Métodos B classe C Dados B Dados C Métodos B Métodos C
  • 52. Herança e Polimorfismo superclasse subclasses Representação gráfica para a Herança Especialização
  • 53.
  • 54. Herança e Polimorfismo A herança múltipla classe A classe B classe C Dados A Métodos A Dados B Métodos B Dados A Dados B Dados C Métodos A Métodos B Métodos C
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74. Classes e Objetos em C++ class TPessoa { protected: char* pcNome; int nIdade; public: void Anda(void); friend; } class TAnimal { protected: char* pcNome; char* pcCientNome; public: void Anda(void); } void TPessoa::Anda(void) { ... } Apesar de estar definida nas duas classes, só teremos a implementação do método Anda de TPessoa:
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83. Classes e Objetos em C++ Exercícios de Implementação 1. Partidos políticos necessitam, principalmente neste período, de pesquisas que mostrem as intenções de voto do eleitor. A cidade é dividida em zonas eleitorais e você deve montar um programa que emita as estatísticas e as intenções de voto em cada zona eleitoral. Quais são as classes mais importantes que você vê para desenvolver o seu programa? Detalhe e implemente a definição de uma das classes que você idealizou em C++. 2. Crie uma classe chamada Complexos para fazer aritmética de números complexos. Escreva o programa e teste sua classe. Lembre-se que um número complexo tem a forma a+bi, onde i = sqrt(-1). Use variáveis float para representar os dados private da classe. Forneça uma função construtora para os objetos dessa classe. As funções membro devem ser as seguintes: a) Adição de dois complexos; b) Subtração de complexos; c) Impressão de complexos na forma (a, b), onde a é a parte real e b é a parte complexa. 3. Crie uma classe Retangulo. A classe tem atributos comprimento e largura, com valor default igual a 1. Forneça as funções get e set, tanto para o comprimento quanto para a altura.
  • 85. Classes e Objetos em C++ //Arquivo 1 ponto.h, definicao para a classe ponto. class ponto { public: //daqui em diante tudo e acessivel. void inicializa(float a,float b); void mostra(void); private: float x; //sao ocultos por default float y; //sao ocultos por default };
  • 86. Classes e Objetos em C++ //Arquivo 2 , ponto.cpp , implementacao para a classe ponto. #include <iostream.h> #include &quot;ponto.h&quot;   void ponto::inicializa(float a,float b) { x=a; y=b; } //as funcoes de uma classe podem acessar os atributos private dela mesma.   void ponto::mostra(void) {cout << &quot;X:&quot; << x << &quot; , Y:&quot; << y << endl;}
  • 87. Classes e Objetos em C++ //Arquivo 3 . Programa principal: princ.cpp #include &quot;ponto.h&quot;   void main() { ponto ap; //instanciacao ap.inicializa(0.0,0.0); //metodos public ap.mostra(); //metodos public
  • 88.
  • 89. Classes e Objetos em C++ //File easyfra.h long mdc(long n,long d); //maximo divisor comum metodo de Euclides.   class fracao { private: long num; //numerador long den; //denominador public: fracao(long t,long m); //construtor comum void simplifica(void); //divisao pelo mdc ~fracao() { /* nao faz nada*/ }   //operacoes matematicas basicas fracao soma (fracao j); fracao multiplicacao(fracao j); //operacoes de comparacao int igual(fracao t); int diferente(fracao t); int maiorouigual(fracao t);   //operacoes de input output void mostra(void); //exibe fracao no video void cria(void); //pergunta ao usuario o valor da fracao   //operacoes de conversao de tipos double convertedbl(void); //converte para double long convertelng(void); //converte para long };
  • 90. Classes e Objetos em C++ //implementacao para a classe fracao. #include <iostream.h> #include &quot;easyfra.h&quot;     long mdc(long n,long d) //maximo divisor comum //metodo de Euclides . { if (n<0) n=-n; if (d<0) d=-d; while (d!=0) { long r=n % d; //%=MOD=Resto da divisao inteira. n=d; d=r; } return n; } void fracao::simplifica(void) { long commd; commd=mdc(num,den); //divisor comum num=num/commd; den=den/commd; if (den<0) { den=-den; num=-num;}; //move sinal para cima }   fracao::fracao(long t,long m) { num=(t); den=(m); simplifica(); //chamada para o mesmo objeto. }
  • 91. Classes e Objetos em C++   fracao fracao::soma(fracao j) { fracao g((num*j.den)+(j.num*den),den*j.den); return g; } fracao fracao::multiplicacao(fracao j) { fracao g(num*j.num,den*j.den); return g; }     int fracao::igual(fracao t) { return ((num*t.den)==(den*t.num)); //funciona bem mesmo para nao simplificada }   int fracao::diferente(fracao t) { return ((num*t.den)!=(den*t.num)); }   int fracao::maiorouigual(fracao t) { return ((num*t.den)>=(t.num*den)); }   void fracao::mostra(void) { cout << &quot;(&quot; << num << &quot;/&quot; << den << &quot;)&quot;; }   void fracao::cria(void) { cout << &quot;Numerador:&quot;; cin >> num; cout << &quot;Denominador:&quot;; cin >> den; simplifica(); }
  • 92. Classes e Objetos em C++ double fracao::convertedbl(void) { double dbl; dbl=(double(num)/double(den)); return dbl; }   //conversao para long long fracao::convertelng(void) { long lng; lng=num/den; return lng; }
  • 93. Classes e Objetos em C++ #include <iostream.h> #include &quot;easyfra.h&quot; //nossa definicao da classe #include <stdio.h> main() { fracao a(0,1),b(0,1); cout << &quot; Entre com fracao a: &quot;; a.cria(); a.mostra(); cout << &quot; Entre com fracao b: &quot;; b.cria(); b.mostra(); fracao c(a.soma(b)); //c(a+b) cout << endl << &quot;c de a+b:&quot;; c.mostra(); cout << endl << &quot;a*b&quot;; c=a.multiplicacao(b); c.mostra(); cout << endl << &quot;a+b&quot;; c=a.soma(b); c.mostra(); cout << endl << &quot;a>=b&quot;; cout << a.maiorouigual(b); cout << endl << &quot;a==b&quot;; cout << a.igual(b); cout << endl << &quot;a!=b&quot;; cout << a.diferente(b); cout << endl << &quot;long(a) &quot;; cout << a.convertelng(); cout << endl << &quot;double(a) &quot;; cout << a.convertedbl(); return 0; }
  • 94. Classes e Objetos em C++ #include <iostream.h> #include <math.h> //double sqrt(double x); de math.h retorna raiz quadrada do numero //double pow(double x, double y); de math.h calcula x a potencia de y   const float ZERO=0.0;   class ponto{ private: float x; //sao ocultos por default nao precisaria private mas e' bom float y; //sao ocultos por default public: //daqui em diante tudo e acessivel em main.   ponto(float a,float b) { x=a; y=b; }   void mostra(void) const {cout << &quot;X:&quot; << x << &quot; , Y:&quot; << y << endl;}   float distancia(const ponto hi) const{ return float( sqrt( ( pow(double(hi.x-x),2.0) + pow(double(hi.y-y),2.0) ) )); //teorema de Pitagoras } };
  • 95. Classes e Objetos em C++ void main() { ponto ap(3.0,4.0); //instanciacao ap.mostra(); //funcoes membro public const ponto origem(ZERO,ZERO); //defino objeto constante origem.mostra(); cout << &quot;Distancia da origem:&quot; << origem.distancia(ap); }
  • 96.
  • 97. Classes e Objetos em C++ #include <iostream.h> void main() { int* a; //declara um ponteiro para endereco de variavel inteira   a=new int(3); //aloca memoria para o apontado por a, gravando neste o valor 3   cout << (*a) << endl ; //imprime o valor do apontado por a   delete a; //desaloca memoria } Ponteiros em C++
  • 98. Classes e Objetos em C++ #include <iostream.h>   class vetor_tres { public: int vet[3]; //vetor alocado estaticamente numa classe. vetor_tres(int a,int b,int c) { vet[0]=a; vet[1]=b; vet[2]=c; }   //construtor do vetor   void mostra(void) { cout << vet[0] << &quot; &quot; << vet[1] << &quot; &quot; << vet[2] << endl;} //funcao membro para mostrar o conteudo do vetor }; Alocação Estática
  • 99. Classes e Objetos em C++ void main() { vetor_tres v1(1,2,3); //criacao de um objeto vetor.   vetor_tres v2(15,16,17); //criacao de um objeto vetor.   v1.mostra(); //mostrando o conteudo de v1.   v2.mostra(); //mostrando o conteudo de v2.   v2=v1; //atribuindo objeto v1 ao objeto v2.   v2.mostra(); //mostrando v2 alterado.   v1.vet[0]=44;   v1.mostra(); //mostrando o conteudo de v1.   v2.mostra(); //mostrando o conteudo de v2. }
  • 100. Classes e Objetos em C++ #include <iostream.h> //vetor alocado dinamicamente void main() { int tamanho; int* vet; cout << &quot;Entre com o tamanho do vetor a criar&quot;; cin >> tamanho;   vet=new int[tamanho]; //alocando vetor de &quot;tamanho&quot; posicoes comecando em a[0]   for (int i=0;i<tamanho;i++) { cout << &quot;Entre com o valor da posicao &quot; << i << &quot;:&quot;; cin >> vet[i]; cout << endl; }   for (int j=0;j<tamanho;j++) { cout << &quot;Posicao &quot; << j << &quot;:&quot; << vet[j]<<endl; } } Alocação Dinâmica
  • 101. Classes e Objetos em C++ //file exvet1.h //header file para classe vetor const int inicio=0;   class vetor{ private: int* v; //este e' o vetor int tamanho; //tamanho maximo do vetor, public: vetor (int tam); //construtor, aloca memória para o vetor. void atribui(int index,int valor); //altera uma posicao do vetor int conteudo(int index); //retorna conteudo de posicao do vetor int maximo(void); //retorna o maior elemento do vetor int primeiro(void); //primeiro indice do vetor int ultimo(void); //ultimo indice do vetor ~vetor() {delete v;} //inline function ou use delete v[]; }; TAD Vetor
  • 102. Classes e Objetos em C++ //codigo, implementacao, para o header file #include <iostream.h> #include <stdlib.h> #include &quot;exvet1.h&quot;   vetor::vetor (int tam) {v=new int[tam]; tamanho=tam;}   void vetor::atribui(int index,int valor) { if (index<tamanho && index>=inicio) v[index]=valor; } int vetor::conteudo(int index) { if (index>=tamanho || index<inicio) { cerr << &quot;Fora dos limites&quot;; exit(1);} return v[index]; } int vetor::primeiro(void) { return inicio;}   int vetor::ultimo(void) { return tamanho-1;}   int vetor:: maximo(void) {int candidato=inicio; //candidato ao maximo for (int i=inicio;i<tamanho;i++) if (v[i]>v[candidato]) candidato=i; return v[candidato];}
  • 103. Classes e Objetos em C++ //programa pricipal #include <iostream.h> #include &quot;exvet1.h&quot;   main() { int aux; //para ler valor a atribuir vetor meu(5); for (int i=meu.primeiro();i<=meu.ultimo();i++) { cout << &quot;Entre com valor da posicao:&quot; << i << &quot;&quot;; cin >> aux; meu.atribui(i,aux); } for (int j=meu.primeiro();j<=meu.ultimo();j++) cout<< meu.conteudo(j)<< &quot; &quot;; cout <<endl << &quot;Maximo:&quot; << meu.maximo(); return 0; }
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
  • 116.
  • 117. Projeto de Programas OO Classe A Classe B Classe A Classe B ou unidirecional bidirecional Classe A Classe B bidirecional ou não determinada
  • 118. Projeto de Programas OO Para facilitar seu entendimento, uma associação precisa ser nomeada - O nome é representado como um “rótulo” colocado ao longo da linha de associação - Um nome de associação é usualmente um verbo ou uma frase verbal Aluno Dsiciplina Cursa
  • 119. Projeto de Programas OO Aluno Disciplina cursa tem matriculado Aluno Disciplina Cursa   Tem matriculado
  • 120.
  • 121. Projeto de Programas OO Muitos * Exatamente um 1 Zero ou mais 0.. * Um ou mais 1.. * Zero ou um 0..1 Faixa especificada 2..4 Pessoa Disciplina Aluno 1..* 1.. *
  • 122.
  • 123. Projeto de Programas OO class TCliente { protected: int nClientCod; char* pcNome; char* pcEndereco; int* nProdCod; //array de inteiros com todos os produtos que possui public: ... } class TProduto { protected: int nProdCod; char* pcDescri; public: ... } Uma instância de Cliente sabe todos os Produtos que possui
  • 124. Projeto de Programas OO class TCliente { protected: int nClientCod; char* pcNome; char* pcEndereco; public: ... } class TProduto { protected: int nProdCod; char* pcDescri; int nClientCod; //qual cliente o possui public: ... } Uma instância de Produto sabe qual o Cliente a possui
  • 125.
  • 126. Projeto de Programas OO class TAluno { protected: char* pcDRE; char** pacMatricula; //matriculas dos professores que possui char* pcNome; int nIdade; public: ... } class TProfessor { protected: char* pcMatricula; char*pcNome; char** pacDRE; //array de strings com DRE dos alunos que possui public: ... }
  • 128.
  • 129.
  • 130. Projeto de Programas OO Todo Parte1 Parte2
  • 131. Projeto de Programas OO Turma Aluno 1..* *
  • 132.
  • 133. Projeto de Programas OO Departamento * Disciplina
  • 134.
  • 135. Projeto de Programas OO Curso 1..* 0.. * Disciplina Aluno 3..10 Curso e disciplina são altamente acoplados (1 curso é formado por 1 ou mais disciplinas) Objetos independentes
  • 136.
  • 137.
  • 138. Projeto de Programas OO Atributos Nome do objeto Operações Unidades organizacionais Estrutura Lugar Entidades externas Papéis Eventos Coisas
  • 139.
  • 140.
  • 141.
  • 142.
  • 143.
  • 144.
  • 145.
  • 146.
  • 147.
  • 148.
  • 149.
  • 150.
  • 151.
  • 152.
  • 153. Herança e Polimorfismo em C++ Herança Pública: Na herança pública as classes filhas passam a ter as mesmas funções membro public da classe pai, as classes filhas podem acrescentar funções membro, dados membro e até redefinir funções membro herdadas . Os atributos da classe pai não são acessíveis diretamente na classe filha a não ser que sejam qualificados como protected . Por isso é que se diz que as classes filhas garantem pelo menos o comportamento da classe pai, podendo acrescentar mais características.
  • 154.
  • 155. Herança e Polimorfismo em C++ Construtores e herança: No construtor de uma classe filha o programador pode incluir a chamada do construtor da classe pai.   Destrutores e herança: Quando um objeto da classe derivada é destruído, o destrutor da classe pai também é chamado dando a oportunidade de liberar a memória ocupada pelos atributos private da classe pai.
  • 156.
  • 157. Herança e Polimorfismo em C++ Tipo de acesso original na Classe base Tipo de acesso resultante na classe derivada Tipo de herança Não acess. Private Private Private Não acess. Protected Public Public Private Protected Public
  • 158. Herança e Polimorfismo em C++ Exemplo
  • 159. Herança e Polimorfismo em C++ //header file class ponto { private: float x; float y; public. ponto(float a,float b); void inicializa(float a,float b); float retorna_x(void); float retorna_y(void); void altera_x(float a); void altera_y(float b); void mostra(void); }; class ponto_reflete:public ponto { private: //se voce quer adicionar atributos... public: ponto_reflete(float a, float b); void reflete(void); };   class ponto_move:public ponto { public: ponto_move(float a,float b); void move(float dx,float dy); };
  • 160. Herança e Polimorfismo em C++ //implementation file #include <iostream.h> #include &quot;pontos.h&quot;   ponto::ponto(float a,float b) { inicializa(a,b); }   void ponto::inicializa(float a,float b) { x=a; y=b; }   float ponto::retorna_x(void) { return x; }   float ponto::retorna_y(void) { return y; }   void ponto::altera_x(float a) { x=a; }   void ponto::altera_y(float b) { y=b; }   void ponto::mostra(void) { cout << &quot;(&quot; << x << &quot;,&quot; << y << &quot;)&quot; <<endl; }  
  • 161. Herança e Polimorfismo em C++ ponto_reflete::ponto_reflete(float a,float b):ponto(a,b) { }   void ponto_reflete::reflete(void) { altera_x(-retorna_x()); altera_y(-retorna_y()); }   ponto_move::ponto_move(float a,float b):ponto(a,b) { }   void ponto_move::move(float dx,float dy) { altera_x(retorna_x()+dx); altera_y(retorna_y()+dy); }
  • 162. Herança e Polimorfismo em C++ #include <iostream.h> #include &quot;pontos.h&quot;   void main() { ponto_reflete p1(3.14,2.17); p1.reflete(); cout << &quot;P1&quot;; p1.mostra();   ponto_move p2(1.0,1.0); p2.move(.5,.5); cout << &quot;P2&quot;; p2.mostra(); } Resultado do programa: P1(-3.14,-2.17) P2(1.5,1.5)
  • 163. Herança e Polimorfismo em C++ Herança Private: class herdeira: private nome_classe_base; As funções membro desta classe base só são acessíveis dentro das declarações da classe filha, ou seja a classe filha não atende por essas funções membro, mas pode usá-las em seu código. Normalmente, quando se usa herança dizemos que a classe filha garante no mínimo o comportamento da classe pai (em termos de funções membro) , a herança private pode invalidar esta premissa.
  • 164. Herança e Polimorfismo em C++ protected deixa os atributos da classe pai visíveis, acessíveis “hierarquia abaixo”. O uso de protected serve como um nível intermediário de proteção entre o acesso public e o private. Membros protected da classe podem ser acessados por membros friends Da classe base e por membros friend das classes derivadas; Nenhuma outra função pode acessar membros protected de uma Classe base.
  • 165.
  • 166. Herança e Polimorfismo em C++ ponto_reflete redefine a função membro mostra da classe pai, enquanto que a classe herdeira ponto_move aceita a definição da função membro mostra dada pela classe ponto que é sua classe pai.
  • 167. Herança e Polimorfismo em C++ //header file class ponto { private: float x; //sao ocultos por default float y; //sao ocultos por default public: //daqui em diante tudo e acessivel. ponto(float a,float b); void inicializa(float a,float b); float retorna_x(void); float retorna_y(void); void altera_x(float a); void altera_y(float b); void mostra(void); }; class ponto_reflete:public ponto { private: //se voce quer adicionar dados membro public: ponto_reflete(float a, float b); void reflete(void); void mostra(void); //redefinicao };   class ponto_move:public ponto { public: ponto_move(float a,float b); void move(float dx,float dy); //esta classe filha nao redefine mostra };
  • 168. Herança e Polimorfismo em C++ //implementation file #include <iostream.h> #include &quot;pontos.h&quot;   ponto::ponto(float a,float b){ inicializa(a,b); }   void ponto::inicializa(float a,float b){ x=a; y=b; }   float ponto::retorna_x(void) { return x; }   float ponto::retorna_y(void) { return y; }   void ponto::altera_x(float a) { x=a; }   void ponto::altera_y(float b) { y=b; } void ponto::mostra(void){ cout << &quot;(&quot; << x << &quot;,&quot; << y << &quot;)&quot; <<endl; }   ponto_reflete::ponto_reflete(float a,float b):ponto(a,b) { }   void ponto_reflete::reflete(void){ altera_x(-retorna_x()); altera_y(-retorna_y()); } void ponto_reflete::mostra(void) { cout << &quot;X:&quot; << retorna_x() << &quot; Y:&quot;; cout << retorna_y() << endl; } //somente altera o formato de impressao ponto_move::ponto_move(float a,float b):ponto(a,b) { } void ponto_move::move(float dx,float dy) { altera_x(retorna_x()+dx); altera_y(retorna_y()+dy); }
  • 169. Herança e Polimorfismo em C++ #include <iostream.h> #include &quot;pontos.h&quot;   void main() { ponto_reflete p1(3.14,2.17); p1.reflete(); cout << &quot;P1&quot;; p1.mostra();   ponto_move p2(1.0,1.0); p2.move(.5,.5); cout << &quot;P2&quot;; p2.mostra();   } Resultado do programa: P1X:-3.14 Y:-2.17 P2(1.5,1.5)
  • 170.
  • 172.
  • 173.
  • 174.
  • 175.
  • 176.
  • 177. Herança e Polimorfismo em C++ #include<iostream.h> class Base{ public: virtual void vfunc(){ cout<<“esta e vfunc() da base ”; } }; class Derivada1:public base{ public: void vfunc(){ cout<<“esta e vfunc() da derivada1 ”; } }; class Derivada2:public base{ public: void vfunc(){ cout <<“esta e vfunc() da derivada2 ”; } };
  • 178. Herança e Polimorfismo em C++ main(){ Base *p, b; Derivada1 d1; Derivada2 d2; p = &b; p->vfunc(); p = &d1; p->vfunc(); p = &d2; p->vfunc(); Return 0; }
  • 179.
  • 180.
  • 181.
  • 182.
  • 183.
  • 184. Herança e Polimorfismo em C++ //header file funcover.h float abs(float a); int abs(int a); //implementation file #include &quot;funcover.h&quot;   float abs(float a) { if (a>0.0) return a; else return -a; }   int abs(int a) { if (a>0) return a; else return -a; }   #include <iostream.h> #include &quot;funcover.h&quot; void main(){ int i1; float f1; cout << abs(int(-10))<<endl; cout << abs(float(-10.1))<<endl; f1=-9.1; i1=8.0; cout << abs(f1) << endl; cout << abs(i1) << endl; }
  • 185.
  • 186. Herança e Polimorfismo em C++ #include <iostream.h> #include &quot;funcover.h&quot;   void main() { cout << max(float(1.2),float(3.4),float(2.1))<<endl; cout << max(float(1.5),float(.65)) << endl; cout << max(int(12),int(120)); }
  • 187.
  • 188. Herança e Polimorfismo em C++ vetor::vetor (int tam) {v=new float[tam]; tamanho=tam;}   int vetor::primeiro (void) {return inicio;}   int vetor::ultimo (void) {return tamanho-1;} float& vetor::operator[](int i){ if (i<0 || i>=tamanho) {cout << &quot;Fora dos limites! Exit program&quot;; exit(1);} return v[i]; } float vetor:: maximo(void) {int candidato=inicio; for (int i=inicio;i<tamanho;i++) if (v[i]>v[candidato]) candidato=i; return v[candidato];}
  • 189.
  • 190.
  • 191.
  • 192.
  • 193.
  • 194.
  • 195.
  • 196.
  • 197.
  • 198.
  • 199.
  • 200.
  • 201.
  • 202.
  • 203. Herança e Polimorfismo em C++ //exvetit6 , arquivo com definicoes do iterador. class iterador{ //classe base abstrata public: int comeca(void) {cout << &quot;Erro, classe abstrata!&quot;;} float operator()() {cout << &quot;Erro, classe abstrata!&quot;; return 0;} int operator!(void) {return 0;} int operator ++() {return 0;} void operator=(float entra) {;} };   class iteradorvetor:public iterador { private: vetor vetorref; int posicao; //classe filha acrescentando dados membro public: iteradorvetor(vetor & v); int comeca(); int operator!(); int operator ++ (); float operator() (); void operator= (float entra); int pos();
  • 204.
  • 205.
  • 206.
  • 207.
  • 208.
  • 209. Herança e Polimorfismo em C++ #include <iostream.h>   class relogio { friend class caixa_de_mensagem; //permitiu acesso as definicoes private e public private: int hora; int minuto; int segundo; //atributos private, encapsulados public: relogio(int h,int m,int s) {hora=h; minuto=m; segundo=s;} } ;
  • 210. Herança e Polimorfismo em C++ class caixa_de_mensagem{ public: void imprime(relogio a){ cout << a.hora << &quot;:&quot; << a.minuto << &quot;:&quot; << a.segundo << endl; } } ;   void main(){ relogio meurolex(11,30,10); caixa_de_mensagem ativa; ativa.imprime(meurolex); }
  • 211.
  • 212.
  • 213.
  • 214.
  • 215.
  • 216.
  • 217.
  • 218.
  • 219.
  • 220.
  • 221.
  • 222.
  • 223.
  • 224.
  • 225.
  • 226.
  • 227.
  • 228. Herança e Polimorfismo em C++ template < class T > class Vector { T * data; int size; public : Vector( int ); ~ Vector() { delete [] data; } T& operator [] ( int i) { return data[i]; } }; // observe a sintaxe para definicao fora da classe template < class T > Vector < T > ::Vector( int n) { data = new T[n]; size = n;
  • 229. Herança e Polimorfismo em C++ // exemplo de declaracao main () { Vector <int> ix(5); // gera um vetor de inteiros Vector <float> fx(6); // gera vetor de floats //... }
  • 230.
  • 231.
  • 232.
  • 233.
  • 234.
  • 235.
  • 236.
  • 237.
  • 238.
  • 239.
  • 240.
  • 241.
  • 242.
  • 243.
  • 244.
  • 245.
  • 246.
  • 247.
  • 248.
  • 249.
  • 250.
  • 251.