Buscar

[Prof. Emiliana] Aula Prática 8

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 3 páginas

Prévia do material em texto

1 
UNIVERSIDADE FEDERAL DE OURO PRETO 
INSTITUTO DE CIÊNCIAS EXATAS E BIOLÓGICAS 
DEPARTAMENTO DE COMPUTAÇÃO 
CIC108 – PROGRAMAÇÃO DE COMPUTADORES II 
 
8a Aula prática de BCC702 – Programação Orientada a Objetos 
Templates 
 
Template é um molde por meio do qual o compilador gera uma família de funções ou 
classes que podem operar com diferentes tipos de informações. Isto é, o mecanismo de 
templates permite escrever uma única função ou classe para operar sobre dados de 
diversos tipos, no lugar de definir funções ou classes separadas para cada tipo de dado. 
 
A declaração template tem o seguinte aspecto: 
 
template <lista de parâmetros template> 
 
a lista de parâmetros será separada por vírgulas e não pode ser vazia. 
 
No exemplo a seguir o template de função troca (...) define uma família de funções que 
permutam os valores de seus parâmetros. 
 
#include <iostream> 
using namespace std; 
 
template <class T> 
void troca(T &a, T &b) 
{ 
 T temp=a; 
 a=b; 
 b=temp; 
} 
 
void main(){ 
 
 int a=3, 
 b=10; 
 
 double x=3.99, 
 y=5.72; 
 
 cout<<"Antes a, b: "<<a<<" "<<b<<endl; 
 cout<<"Antes x, y: "<<x<<" "<<y<<endl; 
 
 troca(a,b); 
 troca(x,y); 
 
 cout<<"Depois a, b: "<<a<<" "<<b<<endl; 
 cout<<"Depois x, y: "<<x<<" "<<y<<endl; 
 
 system("pause"); 
} 
 
 
 
 
 2 
Exercícios: 
 
1. Escreva um template de função menor(...) que retorna o menor entre três valores 
recebidos como argumento. 
 
2. Escreva um template de função localizar(...) que receba três argumentos: um vetor, 
um valor do tipo dos elementos do vetor e um inteiro informando o tamanho do vetor. 
A função deve procurar o valor do segundo argumento entre os elementos do vetor e 
retornar o índice do vetor correspondente ao elemento encontrado ou -1 para indicar que 
o elemento não existe. 
 
3. Teste os templates das questões 1 e 2. 
 
Uma classe template comporta-se como um mecanismo para a geração automática de 
instância de classe de tipo específico. A seguir é mostrado um exemplo. 
 
#ifndef PAR_H 
#define PAR_H 
 
template<class T> 
class Par 
{ 
public: 
 Par( ); 
 Par(T nV1,T nV2); 
 void setV1(T nV1); 
 void setV2(T nV2); 
 T getV1(); 
 T getV2(); 
private: 
 T v1; 
 T v2; 
}; 
 
template<class T> 
Par< T > :: Par( ){} 
 
template<class T> 
Par< T > :: Par(T nV1,T nV2){ 
 v1 = nV1; 
 v2 = nV2; 
} 
 
template<class T> 
void Par< T > :: setV1(T nV1){ 
 v1 = nV1; 
} 
 
template<class T> 
void Par< T > :: setV2(T nV2){ 
 v2 = nV2; 
} 
 
template<class T> 
T Par< T > :: getV1(){ 
 return v1 ; 
} 
template<class T> 
 3 
T Par< T > :: getV2(){ 
 return v2 ; 
} 
 
#endif 
Par.h 
 
 
#include "Par.h" 
 
void main(){ 
 
 int a=3, 
 b=10; 
 
 double x=3.99, 
 y=5.72; 
 
 Par<int> p1; 
 Par<double> p2(x, y); 
 
 p1.setV1(a); 
 p1.setV2(b); 
 
} 
Main.cpp 
 
Exercícios : 
 
4. Modifique o template de classe do exemplo adicionando as funções: 
 
imprimir(): Para imprimir os pares de valores; 
soma(): que retorna a soma dos valores v1 e v2; 
troca(): que permuta os valores armazenados nas variáveis v1 e v2. 
 
5. Uma pilha é uma estrutura de dados em que valores somente podem ser adicionados 
no topo. Assim, o último elemento colocado na pilha é o primeiro a ser removido. As 
funções básicas de uma pilha são: 
 
� push() que insere um elemento no topo da pilha retornando true se a operação 
foi bem sucedida e false caso contrário (não há espaço na pilha); 
� pop() que remove um elemento do topo da pilha retornando true se a operação 
foi bem sucedida e false caso contrário (a pilha está vazia). 
 
Além disso, são definidas duas funções auxiliares isEmpty() que retorna true se a pilha 
está vazia e isFull() que retorna true se a pilha está cheia. Crie um template de classe 
para representar uma pilha genérica que pode armazenar no máximo 20 elementos. 
 
Observação: Os elementos de uma pilha serão armazenados em um vetor de 20 
posições. 
 
6. Teste os templates dos exercícios 4 e 5.

Outros materiais