Вы находитесь на странице: 1из 21

PLANTILLAS

La POO permite disear clases y funciones que


actan sobre tipo arbitrarios o genricos.
Una plantilla o llamado tambin patrones, permite
escribir funciones y clases genricas.
Es aplicado a objetos de diferentes tipos.

templates

float

int

double

ING. FELIX HUARI

PLANTILLA DE FUNCIONES
Define
a
un
conjunto
de
funciones
sobrecargadas.
El compilador genera automticamente tantas
versiones diferentes como sean necesarias.
La funcin genrica se crea utilizando la palabra
reservada template.
template <class Identificador>
<Tipo dato> <Nombre Funcion>(<Lista de parametros>)
{
Sentencia(s);
}

ING. FELIX HUARI

EJEMPLO
/* Dados 2 datos no iguales por cada tipo, escribir cual es el
menor */
#include <iostream>
using namespace std;
// Declaracion de la funcion plantilla
template <class T> T Menor(T a, T b);
// Programa principal
int main()
{ int a,b; char ca,cb;
float fa,fb;
cout<< Ingrese 2 datos no iguales por cada tipo<<endl;

ING. FELIX HUARI

EJEMPLO
cout<<"Ingrese 2 numero enteros
:";cin>>a>>b;
cout<<"Ingrese 2 caracteres
:";cin>>ca>>cb;
cout<<"Ingrese 2 numero reales
:";cin>>fa>>fb;
// Salida y llamada a las funciones
cout<<"\nEl Menor de los enteros es :"<<Menor(a,b)<<endl;
cout<<"El Menor de los caracteres es:"<<Menor(ca,cb)<<endl;
cout<<"El Menor de los flotantes es :"<<Menor(fa,fb)<<endl;

ING. FELIX HUARI

CONTINUACION
//Definicion de la funcion plantilla
template <class T>
T Menor(T x, T y)

{ T w;
w=x<y ? x:y;
return w;
}

ING. FELIX HUARI

EJEMPLO DE APLICACIN
/* Programa que permite almacenar datos en un vector */
#include <iostream>
using namespace std;
const int M=100;
//Declaracion de la funciones plantilla
template <class R> void Lectura(R X[],int m);

template <class R> void Escribe(R X[],int m);


template <class R> void Ordenar(R X[],int m);
// Programa principal
int main()
{ int N,A[M];

float B[M];

ING. FELIX HUARI

EJEMPLO DE APLICACIN
cout<<"Ingrese tamao del vector:";cin>>N;
cout<<"\nLECTURA DE DATOS ENTEROS\n";
Lectura(A,N);
cout<<"SALIDA DE DATOS DEL VECTOR A\n";
Escribe(A,N);
cout<<"LECTURA DE DATOS REALES\n";

Lectura(B,N);
cout<<"SALIDA DE DATOS DEL VECTOR B\n";
Escribe(B,N);
cout<<"ORDENANDO DEL VECTOR A\n";

ING. FELIX HUARI

CONTINUACION ...
Ordenar(A,N);
cout<<"SALIDA DEL VECTOR \"A\" ORDENADO\n\n";
Escribe(A,N);

}
template <class R> void Escribe(R X[],int m)
{ int i,j;
for(i=0;i<m;i++)
cout<<X[i]<<"\t";
cout<<endl;
}

ING. FELIX HUARI

CONTINUACION ...
// Definiendo las funciones plantilla
template <class R> void Lectura(R X[],int m)
{ int i,j;
for(i=0;i<m;i++)
{ cout<<"A["<<i<<"]=";
cin>>X[i];
}
}

ING. FELIX HUARI

CONTINUACION ...
template <class R> void Ordenar(R X[],int m)
{ int i,j;
R temp;
for(i=0;i<m-1;i++)
for(j=i+1;j<m;j++)
if(X[i]>X[j])
{ temp=X[i];
X[i]=X[j];
X[j]=temp;
}

ING. FELIX HUARI

10

PLANTILLA DE CLASES
Define una clase genrica
Permite manipular diferente tipo de dato.
La declaracion est dado por:
template <class Id> class <Nombre Clase>
{ private:
<Lista de dato miembro>;
public:
<Funciones miembro>;
};
Donde. Id es el identificador de plantilla

ING. FELIX HUARI

11

PLANTILLA DE CLASES
Para definir la funciones miembro de la clase se usa la siguiente sintaxis:
template <class Id>
<tipo dato> <Nombre Clase> <Id>::<NombreFuncion>(Lista de parametros)
{
Sentencia(s);
};

Para crear una instancia de clase (objeto), seguir la siguiente sintaxis:


Nombre clase<Tipo de dato> nombre objeto; // o tambien
Nombre clase<Tipo de dato> Nombre Objeto;

ING. FELIX HUARI

12

EJEMPLO
// Programa que calcula la distancia entre 2 puntos
#include <iostream>
#include <math.h>
using namespace std;
// Declaracion de la plantilla de clase
template <class T> class Punto
{ private:
T x1,y1,x2,y2;
float d;
public:
void Lectura();
void Proceso(); void Ver();
};
ING. FELIX HUARI

13

CONTINUACION ...
// Programa principal
int main()
{ Punto<int> P;
Punto<float> Q;
cout<<"LAS COORDENADAS DEL PRIMER OBJETO"<<endl;

P.Lectura(); P.Proceso(); P.Ver();


cout<<"LAS COORDENADAS DEL SEGUNDO OBJETO"<<endl;

Q.Lectura(); Q.Proceso();
Q.Ver();
}

ING. FELIX HUARI

14

CONTINUACION ...
template <class T>
void Punto<T>::Lectura()
{ cout<<"x1=";cin>>x1;cout<<"y1=";cin>>y1;
cout<<"x2=";cin>>x2;cout<<"y2=";cin>>y2;
}

template <class T>


void Punto<T>::Proceso()
{ d=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
}

ING. FELIX HUARI

15

CONTINUACION ...
template <class T> void Punto<T>::Ver()
{ cout<<"P("<<x1<<","<<y1<<")"<<endl;
cout<<"Q("<<x2<<","<<y2<<")"<<endl;
cout<<"La distancia de P a Q es="<<d<<endl;
}

ING. FELIX HUARI

16

EJEMPLO DE APLICACION
// Programa que permite almacenar datos en un vector
#include <iostream>
using namespace std;
const int M=100;
// Declarando la clase plantilla
template <class S>
class Vector
{ private:
int N;
S X[M];
public:
Vector(int m):N(m){}
void Lectura();
void Escribe();
void Sortear();
ING.
};

FELIX HUARI

17

CONTINUACION ...
// Programa principal
int main()
{ int elem;
cout<<"Ingrese tamao del vector:";cin>>elem;
Vector <int> Z(elem);
Vector <char> Y(elem);
cout<<"\nLECTURA DE DATOS ENTEROS\n";
Z.Lectura();
cout<<"SALIDA DE DATOS DEL VECTOR- NUMEROS ENTEROS\n";

Z.Escribe();
cout<<"\nLECTURA DE DATOS CHAR\n";
Y.Lectura();

ING. FELIX HUARI

18

CONTINUACION ...
cout<<"SALIDA DE DATOS DEL VECTOR- CHAR\n";
Y.Escribe();
cout<<"ORDENAMIENTO ASCENDENTE DEL VECTOR-CHAR\n";
Y.Sortear();
cout<<"SALIDA DEL VECTOR ORDENADO-CHAR\n";
Y.Escribe();
} // Fin de programa principal

ING. FELIX HUARI

19

CONTINUACION ...
// Definiendo las funciones miembro de la clase
template <class S> void Vector<S>::Lectura()
{ int i;
for(i=0;i<N;i++)
{ cout<<"A["<<i<<"]="; cin>>X[i]; }
}
template <class S> void Vector<S>::Escribe()
{ int i;
for(i=0;i<N;i++)
cout<<X[i]<<"\t";
cout<<endl;
}
ING. FELIX HUARI

20

CONTINUACION ...
template <class S> void Vector<S>::Sortear()
{ int i,j;
S temp;
for(i=0;i<N-1;i++)
for(j=i+1;j<N;j++)
if(X[i]>X[j])
{ temp=X[i];
X[i]=X[j];
X[j]=temp;
}
}

ING. FELIX HUARI

21

Вам также может понравиться