Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
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.