Академический Документы
Профессиональный Документы
Культура Документы
templates
float
int
double
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);
}
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;
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;
CONTINUACION
//Definicion de la funcion plantilla
template <class T>
T Menor(T x, T y)
{ T w;
w=x<y ? x:y;
return w;
}
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);
float B[M];
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";
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;
}
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];
}
}
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;
}
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
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);
};
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;
Q.Lectura(); Q.Proceso();
Q.Ver();
}
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;
}
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;
}
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();
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
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;
}
}
21