Plantillas
Recurso que ofrece el lenguaje C++ para ganar generalidad en la definición de soluciones, estos permiten declarar funciones o clases dejando sin especificar el tipo de alguno de sus parámetros y los datos (en el caso de las funciones) o el tipo de algunos de sus miembros (en el caso de las clases).
Plantillas de funciones: Es un modelo de función que el compilador C++ usará para construir diferentes versiones de una misma función , según los tipos de datos que se especifiquen al invocar a la misma. La plantilla permite escribir funciones que difieren exclusivamente en el tipo de datos que manejan.
Sintaxis:
template <class T1, class T2>
donde:
template es la palabra reservada al igual que clase T1,T2 son los tipos de datos genéricos.
Ejemplos:
#include <stdlib.h>
#include <iostream>
#include <conio.h>
using namespace std;
/*
int maximo (int a , int b)
{if (a<b)
return b;
else
return a;}
float maximo (float a, float b)
{if (a<b)
return b;
else
return a;
}*/
template <class T1>//T1 tipo generico entra lo que sea y sale el resultado bien mil :)
T1 maximo(T1 a, T1 b)
{
if (a<b)
return b;
else
return a;
}
int main ()
{
char d='B', e='C',f;
int a=-3,b=-10,c;
float w=-5.7,x=8.9,y;
c=maximo(a,b);
y=maximo(w,x);
cout<<"maximo("<<a<<")("<<b<<")"<<"="<<c<<endl;
cout<<"maximo("<<w<<")("<<x<<")"<<"="<<y<<endl;
f= maximo (d,e);
cout<<"maximo("<<d<<")("<<e<<")"<<"="<<f<<endl;
system ("pause");
}
Plantillas de clases:
Permiten definir versiones de una misma clase que difieran en el tipo de dato de alguno(s) de sus miembros. Es decir, crea el modelo de una clase el cual permitirá definir distintas instancias de la misma para diferentes tipos de datos.
Sintaxis:
template <class T>
class plantilla clase
{
private: t atributo
.
.
.
public:
.
.
.
};
class punto
{ private:
float x; --> int x; --> long int x;
float y; -->int y; --> long int y;
public:
.
.
.
};
template class <T>
class punto
{ private:
T x;
T y;
public:
.
.
.
};
Ejemplo 1:
#include <stdlib.h>
#include <iostream>
#include <conio.h>
using namespace std;
template < class T1, class T2>
T1 maximo(T1 a, T2 b)//Elige dos tipos de datos diferentes :D
{
if (a<b)
return b;
else
return a;
}
int main ()
{system ("color 5F");
cout<<"maximo= "<< maximo (3,'A')<<endl;
cout<<"maximo= "<< maximo (-100,-98)<<endl;
cout<<"maximo= "<< maximo ('Z',20)<<endl;
system ("pause");
}
Ejemplo 2:
#include <stdlib.h>
#include <iostream>
#include <conio.h>
using namespace std;
template <class T1,class T2>
class ejemploplantilla
{
private:
T1 dato1;
T2 dato2;
public:
ejemploplantilla(T1 d1, T2 d2) {dato1=d1;dato2=d2;}
void imprimedato(){ cout<<"Dato 1: " <<dato1<<endl;
cout<<"Dato 2: " <<dato2<<endl;
}
};
void usaplantilla()
{
ejemploplantilla <int, float> objp(1,6.5);
objp.imprimedato();
cout<<endl;
ejemploplantilla <char,int> objp2('A',-85);
objp2.imprimedato();
cout<<endl;
getch();
}
int main ()
{
system ("color 5F");
usaplantilla ();
return 0;
}
No hay comentarios.:
Publicar un comentario