A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Polimorfismo e suas aplicações em C++.

Apresentações semelhantes


Apresentação em tema: "Polimorfismo e suas aplicações em C++."— Transcrição da apresentação:

1 Polimorfismo e suas aplicações em C++.
Ítalo Mendes da Silva Ribeiro

2 Definição Polimorfismo é uma palavra grega que significa “muitas formas”. Na Programação Orientada a Objetos (POO) ocorre quando duas ou mais classes diferentes com herança entre si possuem métodos com mesmo nome. Classes polimórficas.

3 Aplicações de polimorfismo
Invocação de funções com ponteiros de objetos das classes polimórficas. sobrescrita de funções. funções virtuais. classes abstratas.

4 Vantagens do polimorfismo
Criar sistema mais facilmente extensível. Versatilidade de uma mesma mensagem entre os objetos possuírem diferentes resultados.

5 Classes exemplo #include <iostream> using namespace std; class Poligono { protected: int largura, altura; public: void setValores (int a, int b) { largura=a; altura=b; } int area() { return largura+altura; } }; class Retangulo: public Poligono { public: { return largura*altura; }

6 Invocação de Funções com Ponteiros
Mesma variável com diferentes tipos Invocar uma função do objeto da classe pai a partir de um objeto da classe filha A função executada é da classe pai Os dados utilizados são da classe filha

7 Invocação de Funções com Ponteiros
int main () { Poligono pol; Retangulo ret; Poligono *polPTR = &ret; pol.setValores(3,7); ret.setValores(4,5); cout << polPTR->area() << '\n'; return 0; } SAÍDA: 9

8 Invocação de Funções com Ponteiros
Não é possível invocar uma função do objeto da classe filho a partir de um objeto da classe pai A classe pai não é a classe filha O objeto da classe pai não é um objeto da classe filha int main () { Poligono pol; //erro Retangulo *retPTR = &pol; }

9 Função virtual É uma função da classe pai que pode ser redefinida na classe filha A função da classe filha vai SOBRESCREVER a função da classe pai Função com o mesmo nome e parâmetros (assinatura) Cada classe filha pode ter uma implementação diferente da função virtual Resultado da execução da função virtual pode ser diferente em cada objeto

10 Função virtual Uma única mensagem entre os objetos retorna um resultado adequado para cada objeto A escolha da função adequada é feita em tempo de execução e é chamada de ligação tardia (dynamic binding) Deve-se usar ponteiro ou referência da classe Quando a classe possui objeto com sobrescrita de função o destrutor da classe deve ser virtual para destruição do objeto de acordo com o tipo adequado

11 Função virtual #include <iostream> using namespace std; class Poligono { protected: int largura, altura; public: void setValores (int a, int b) { largura=a; altura=b; } virtual int area() { return largura+altura; } }; class Retangulo: public Poligono { public: int area() { return largura*altura; }

12 Função virtual int main () { Poligono pol; Retangulo ret;
Poligono *polPTR = &ret; pol.setValores(3,7); ret.setValores(4,5); cout << polPTR->area() << '\n'; return 0; } SAÍDA: 20

13 Função virtual SOBRECARGA de função ocorre quando existem vários métodos em uma mesma classe com o mesmo nome e diferente lista de parâmetros int area() { return largura+altura; } int area(int a) { return largura*a; } int area(int a, int b) { return largura*a*b; }

14 Classe abstrata e função virtual pura
Classes abstratas não podem instanciar objetos São incompletas por não terem a implementação das funções Outra classe deve herdar da classe abstrata e implementar as funções da classe abstrata para instanciar objetos Classes que podem instanciar objetos são chamadas concretas Classes de mais alto nível tendem a serem abstratas

15 Classe abstrata e função virtual pura
Classe abstrata possui ao menos uma função virtual pura Função virtual pura não possui implementação e obrigatoriamente deve ser implementada na classe filha Classes abstrata é utilizada quando não existe motivo para implementação da função na classe pai, mas existe motivo em todas as suas classes filhas virtual int area() = 0;

16 Função virtual #include <iostream> using namespace std; class Poligono { protected: int largura, altura; public: void setValores (int a, int b) { largura=a; altura=b; } virtual int area() = 0; };

17 Bibliografia DEITEL, Harvey. DEITEL, Paul. C++: Como programar. 5ª ed., Editora Pearson MALIK, D. S. C++ Programming: From Problem Analysis to Program Design, 5ª ed., Cengage Learning


Carregar ppt "Polimorfismo e suas aplicações em C++."

Apresentações semelhantes


Anúncios Google