1 / 26

Curso de C/C++ Aula 8 Instrutor: Luiz Felipe Sotero Material por: Allan Lima

Curso de C/C++ Aula 8 Instrutor: Luiz Felipe Sotero Material por: Allan Lima http://allanlima.wordpress.com/. Você pode: copiar, distribuir, exibir e executar a obra criar obras derivadas fazer uso comercial da obra Sob as seguintes condições:

ronat
Télécharger la présentation

Curso de C/C++ Aula 8 Instrutor: Luiz Felipe Sotero Material por: Allan Lima

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Curso de C/C++ Aula 8 Instrutor: Luiz Felipe Sotero Material por: Allan Lima http://allanlima.wordpress.com/

  2. Você pode: • copiar, distribuir, exibir e executar a obra • criar obras derivadas • fazer uso comercial da obra • Sob as seguintes condições: • Atribuição. Você deve dar crédito ao autor original, da forma especificada pelo autor ou licenciante. • Compartilhamento pela mesma Licença. Se você alterar, transformar, ou criar outra obra com base nesta, você somente poderá distribuir a obra resultante sob uma licença idêntica a esta. • Para cada novo uso ou distribuição, você deve deixar claro para outros os termos da licença desta obra. • Qualquer uma destas condições podem ser renunciadas, desde que Você obtenha permissão do autor. • Veja aqui a licença completa

  3. Roteiro • Métodos virtuais • Classes abstratas • Templates

  4. Poligono Retangulo Triangulo Métodos Virtuais • Problema: • Método area() • Queremos que as classes Retangulo e Triangulo tenham métodos com implementações diferentes

  5. Métodos Virtuais • Solução: • Declarar o método area() virtual • virtualint area(); • O modificador virtual permite que um ponteiro para uma classe básica possa chamar o método correto • Exemplo: Triangulo t(45, 10); Poligono *pp = &t; cout << "Area de pp: " << pp->area() << endl;

  6. Exemplo • exemploMetodosVirtuais.cpp

  7. Classes Abstratas • São classe que não podem ter objetos instanciados • Uma classe é dita abstrata quando possui pelo menos um método abstrato • Um método abstrato é aquele que não é implementado na classe • Usamos “= 0” após o protótipo do método para torná-lo abstrato • Exemplo: virtualint area() = 0;

  8. Classes Abstratas • Toda classe que herda de uma classe abstrata deve implementar os métodos abstratos • Exceção: Quando a sub-classe também é abstrata • Métodos abstratos podem ser utilizados normalmente em classes abstratas

  9. Classes Abstratas • exemploClassesAbstratas.cpp

  10. Exercícios 1)Crie uma classe abstrata ElementoGeometrico com os seguintes métodos públicos virtuais: • virtualfloat perimetro() = 0; • virtualfloat area() = 0; • Crie as classes Circulo e Quadrado que herdam de ElementoGeometrico e implementam os seus métodos • Sinta-se a vontade para definir os atributos e construtores necessários para cada classe

  11. Templates • São mecanismos que permitem a definição genérica de funções e classes sem especificar os tipos de implementação • Ajudam a reutilizar o código • São muito bons para a construção de bibliotecas

  12. Templates de Funções • Definem um algoritmo genérico e independente de tipo • Exemplo: • Busca em um array • Maximo entre elementos • Ordenação de um array • Mínimo entre elementos

  13. Templates de Funções • Permitem a criação de funções genéricas • Recebendo qualquer tipo de dado como parâmetro • Retornando qualquer tipo de dado • Uma única função criada pode ser aplicada a qualquer tipo • Sintaxe: • template <class identificador> função; • template <tipo identificador> função;

  14. Exemplo template<class T> T maximo(T a, T b) { return (a > b) ? a : b; } inta = maximo(10, 45) ; doubled = maximo(10.5, 5.06); // como a e b devem ter o mesmo tipo utilizamos <double> double c = maximo <double> (5, 5.06);

  15. Exemplo • exemploTemplatesFuncoes.cpp

  16. Templates de Classes • Problema: • Queremos criar uma classe Stack que pode ser de inteiros, floats, strings, ..., ou qualquer outro tipo definido pelo programador • Queremos criar uma classe Stack genérica • Solução: • Utilizar templates de classes template <class T> class Stack { ... };

  17. Exemplo • exemploTemplatesClasses.cpp

  18. Especialização de Templates • Muitas vezes o comportamento genérico não é capaz resolver todos os problemas • Exemplo: • Stack<char *> sChar(10); • E se liberarem a memória da string? • Este objeto não cria cópias das strings, faz apenas cada elemento seu apontar para o mesmo endereço da string que foi passada como parâmetro • Solução: • Especialização de Templates

  19. Exemplo // não precisamos mais do template <class T> void Stack<char*>::push(char* &element) { if (this->nextIndex != -1) { this->elements[this->nextIndex] = new char[strlen(element) + 1]; strcpy(this->elements[this->nextIndex], element); this->nextIndex--; } }

  20. Especialização de Templates • Também podemos especializar um Template de Classe ou uma função qualquer • Assim garantimos o comportamento correto para tipos específicos

  21. Exemplo • exemploEspecializacaoTemplates.cpp

  22. Especialização de Templates • Podemos especializar Templates de classes • É útil quando os comportamentos são muito diferentes • Estas classes devem redefinir todos os membros para o tipo específico • Também podemos criar novos membros • Sintaxe: template <> class nomedaClasse <Tipo> { ... };

  23. Exemplo • exemploEspecializacaoClasses.cpp

  24. Exercícios 2)Crie um template chamado Vetor • Esta classe irá guardar um array de elementos genéricos • Os seus métodos são: • void inserir(T &elemento); • intprocurarIndice(T &elemento); • bool contem(T &elemento); • void remover(T &elemento); • Desafios: • Faça a sua classe funcionar corretamente com char * • Implemente o operador[]

  25. Referências • Stroustrup, Bjarne. The C++ Programming Language, Special Edition • Eckel, Bruce. Thinking in C++, 2nd ed. Volume 1 • Slides de Gustavo (ghcp@cin.ufpe.br) do curso de C/C++

  26. Agradecimentos • Allan Lima, Breno do Vale e Francisco Magalhães • Pelo material cedido para o curso

More Related