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.