Beruflich Dokumente
Kultur Dokumente
Parte IV
Introduo Programao em C++
(Continuao)
Relembrando da ltima
Aula...
Polimorfismo
Mais exemplos de programao orientada a objetos...
Templates
Funes templates
Especificam um conjunto completo de funes
(sobrecarregada) relacionadas
Cada uma uma funo template especializada
Classes templates
Especificam um conjunto completo de classes
relacionadas
Cada uma uma classe template especializada
Funes Templates
Funes sobrecarregadas
Operaes similares ou idnticas
Tipos diferentes de dados
Funes Templates
Se as operaes forem idnticas para cada tipo...
Funes podem ser escritas de maneira mais compacta
Funes template
Funes Template
Funes templates
Operaes idnticas
Tipos diferentes de dados
Checagem de tipo
Diferente das macros em C
#define min(X, Y) ((X) < (Y) ? (X) : (Y))
Funes Template
Definio de funes template
Palavra-chave: template
Templates de Funes
Sobrecarregadas
Especializao de funes template relacionadas
Compilador usa resoluo sobrecarregada para
identificar a funo que melhor se enquadra com a
chamada no cdigo fonte
Compilador deduz a substituio que deve ser feita
entre o tipo do parmetro do template e o tipo do
parmetro da chamada da funo
Compilador compila a verso especializada que atenda a
chamada no cdigo fonte
No exemplo anterior, trs verses especializadas foram
criadas para printArray
Linguagens de Programao DEL-Poli/UFRJ
Templates de Funes
Sobrecarregadas
Funo template sobrecarregada
Outras funes templates com o mesmo nome
Parmetros diferentes
printArray (const T *array, int count) e
printArray (const T *array, int count, int lowSubscript)
Templates de Funes
Sobrecarregadas
Funo template sobrecarregada
Compilador realiza processo de identificao de padro
Tenta achar o mesmo padro do nome da funo e dos
tipos de argumentos
Compilador procura a funo mais prxima da funo
chamada
Ao encontrar, a utiliza
Se falhar,
Funo template correspondente no encontrada ou se
houver mais de uma funo que atende s caractersticas
Compilador gera um erro
Linguagens de Programao DEL-Poli/UFRJ
Classe Template
Pilha (stack)
Classes templates
Programao genrica
Descreve pilha genericamente
Instanciao de verso de tipo especfico
Tipos parametrizados
Requerem um ou mais tipos de parmetros
Personaliza template de classe genrica para formar
classe template especializada
Ex.:
template<>
class Array< Martian > {
// corpo da definio de classe
};
Templates e Herana
H muitas maneiras de relacionar templates e herana
Classe template derivada de classe template
especializada
Classe template derivada de classe que no template
Classe template especializada derivada de classe
template especializada
Template e friend
Amizade entre classe template e
Funo global
Funo membro de outra classe
Possivelmente uma classe template especializada
Classe inteira
Possivelmente uma classe template especializada
Template e friend
Funes friend
Na definio de template< class T > class X
friend void f1();
f1() friend de todas as classes template especializadas
Template e friend
Funes friend
Na definio de template< class T > class X
friend void A::f4();
Funo membro f4 da classe A friend de todas as classes
template especializadas
Template e friend
Classes friend
Na definio de template< class T > class X
friend class Y;
Toda funo membro de Y friend de toda classe template
especializada
Template e friend
Template e friend
Template e friend
Template e friend
Classe template
Exemplo 1
Escreva um programa que implemente a classe
template List que retira elementos de uma fila na
mesma ordem que foram inseridos (esquema first-in
first-out FIFO)
?
Linguagens de Programao DEL-Poli/UFRJ
Exemplo 1
Exemplo 1
Exemplo 1
Exemplo 1
Exemplo 1
Exemplo 1
Exemplo 2
Escreva um programa que implemente a classe
template SonList que herda da classe List do Exemplo
1 e adiciona o mtodo testList, semelhante ao mtodo
do segundo exemplo desta aula.
?
Linguagens de Programao DEL-Poli/UFRJ
Exemplo 2
Exemplo 2
Exemplo 2
Exemplo 2
Exemplo 2
Exemplo 2
Exemplo 2
Exemplo 2
Leitura Recomendada
Captulos 14 do livro
Deitel, C++ How to Program, 5th edition, Editora
Prentice Hall, 2005