Sie sind auf Seite 1von 66

Linguagens de Programao

Prof. Miguel Elias Mitre Campista


http://www.gta.ufrj.br/~miguel

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Parte IV
Introduo Programao em C++
(Continuao)

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Relembrando da ltima
Aula...
Polimorfismo
Mais exemplos de programao orientada a objetos...

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

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

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Funes Templates
Funes sobrecarregadas
Operaes similares ou idnticas
Tipos diferentes de dados

Operaes similares e tipos diferentes


void print (int a) { cout << Inteiro << a ; }
void print (double a) { cout << Double << a ; }

Operaes idnticas e tipos diferentes


void print (int a) { cout << a; }
void print (double a) { cout << a; }
Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Funes Templates
Se as operaes forem idnticas para cada tipo...
Funes podem ser escritas de maneira mais compacta
Funes template

void print (T a) { cout << T << a ; },


T pode ser int ou double!

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Funes Template
Funes templates
Operaes idnticas
Tipos diferentes de dados

Template de funo nica


Compilador gera cdigo objeto para cada funo utilizada
em separado

Checagem de tipo
Diferente das macros em C
#define min(X, Y) ((X) < (Y) ? (X) : (Y))

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Funes Template
Definio de funes template
Palavra-chave: template

Lista tipos formais de parmetros em parnteses


angulares (< e >)
Precedido pela palavra-chave class ou typename

class e typename podem ser intercalados


template< class T >
template< typename ElementType >
template< class BorderType, class FillType >

Especifica tipos de:

Argumentos para funes, tipo de retorno de funo e


variveis dentro da funo

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Primeiro Exemplo de Programa


Usando Template em C++

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Primeiro Exemplo de Programa


Usando Template em C++

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Primeiro Exemplo de Programa


Usando Template em C++

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

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

Prof. Miguel Campista

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)

Funes que no so templates com o mesmo nome


Argumentos diferentes de funo
printArray (const T *array, int count) e
printArray (const char *array, double count)

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

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

Prof. Miguel Campista

Classe Template
Pilha (stack)

Estrutura LIFO (Last-In-First-Out)

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

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Classes template so precedidas pelo cabealho


template <class T>

Segundo Exemplo de Programa


Usando Template em C++

Segundo Exemplo de Programa


Usando Template em C++

Funes membro de classe template so tambm


funes template, portanto devem ser precedidas por
template <class T>

O operador de resoluo de escopo (Stack <T>)


utilizado para associar as funes membro ao escopo
da classe template

Segundo Exemplo de Programa


Usando Template em C++

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Segundo Exemplo de Programa


Usando Template em C++

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Terceiro Exemplo de Programa


Usando Template em C++
J que as operaes realizadas sobre as pilhas de
doubles e de inteiros foram as mesmas...
Encher e depois esvaziar a pilha

Cria-se uma funo template para realizar a


mesma sequncia de operaes independente do
tipo dos dados inseridos na pilha

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Terceiro Exemplo de Programa


Usando Template em C++

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Terceiro Exemplo de Programa


Usando Template em C++

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Terceiro Exemplo de Programa


Usando Template em C++

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Classe Template e Parmetros


sem Tipo
Classes templates
Parmetros template sem tipo
Argumentos padro
Tratados como consts
Ex.:
template< class T, int elements >
Stack< double, 100 > mostRecentSalesFigures;
Declara objeto do tipo Stack< double, 100> pilha
Na classe poderia ser declarado um array a [elements];

Tambm podem ser usados em funes

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Classe Template e Parmetros


sem Tipo

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Classe Template e Parmetros


sem Tipo

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Classe Template e Parmetros


sem Tipo

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Classe Template e Parmetros


sem Tipo
E agora? Posso
utilizar uma varivel
inteira?

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Classe Template e Parmetros


sem Tipo

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Classe Template e Parmetros


sem Tipo
E agora? Posso
utilizar uma
constante inteira?

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Classe Template e Parmetros


sem Tipo

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Classe Template e Parmetros


sem Tipo
Classes templates
Parmetro tipados
Tipo padro
Ex.: template< class T = string >
Declara objeto do tipo Stack<> pilha;

No podem ser usados em funes

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Classe Template e Parmetros


sem Tipo
Sobrecarregando classes templates
Classe para tipo especializado definido explicitamente
No usa nada da classe template original e pode at
implementar suas prprias funes membro
Empregada quando um determinado tipo ou classe exige
funes membro especficas

Ex.:
template<>
class Array< Martian > {
// corpo da definio de classe
};

Objetos da classe Martian exigem um construtor padro


e funes membro prprias

Classe Template e Parmetros


sem Tipo

Classe Template e Parmetros


sem Tipo

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Classe Template e Parmetros


sem Tipo

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

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

Classe no template derivada de classe template


especializada

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

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

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Template e friend
Funes friend
Na definio de template< class T > class X
friend void f1();
f1() friend de todas as classes template especializadas

friend void f2( X< T > & );


f2( X< float > & ) friend de X< float > somente,
f2( X< double > & ) friend de X< double >
somente,
f2( X< int > & ) friend de X< int > somente,

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

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

friend void C< T >::f5( X< T > & );


Funo membro C<float>::f5( X< float> & ) friend
da class X<float> somente

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

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

friend class Z<T>;


class Z<float> friend da classe template especializada
X<float>, etc.

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Template e friend

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Template e friend

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Template e friend

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Template e friend

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Templates e Membros static


Classe que no template

Membros de dados estticos (static) so


compartilhados entre todos os objetos

Classe template

Cada classe especializada tem a sua prpria cpia do


membro de dados esttico e de funes membro
(static)
Todos os objetos da mesma classe especializada
compartilham os dados estticos

Variveis estticas (static) devem ser inicializadas


em escopo de arquivo
Como das classes que no so templates

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

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

Prof. Miguel Campista

Exemplo 1

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Exemplo 1

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Exemplo 1

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Exemplo 1

Exemplo 1

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Exemplo 1

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

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

Prof. Miguel Campista

Exemplo 2

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Exemplo 2

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Exemplo 2

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Exemplo 2

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Exemplo 2

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Exemplo 2

Exemplo 2

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Exemplo 2

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Leitura Recomendada
Captulos 14 do livro
Deitel, C++ How to Program, 5th edition, Editora
Prentice Hall, 2005

Linguagens de Programao DEL-Poli/UFRJ

Prof. Miguel Campista

Das könnte Ihnen auch gefallen