Titulo.jpg (10742 bytes)
FlechaI.jpg (2886 bytes) casa.jpg (31539 bytes) FlechaDA.jpg (3959 bytes)

Templeate


Cuando tenemos sistemas que se comportan igual pero que lo que varia en ellos es el tipo de dato que manejan es conveniente tener una estructura que permita a partir de una clase definir todas las demas.

Un ejemplo de este tipo de problemas son los programas que manejan vectores o matrices. Las operaciones que se realizan entre ellos son siempre iguales solo variando el tipo de dato. De esa manera a partir del contenido de la clase TVector podemos obtener el Templeate TVector.

Como podemos ver a continuaci�n un Templeate no es m�s que una clase generica a la que se le pasa como parametro el tipo de dato que pretendemos utilizar en ella, en este caso sustituido por "T"

template <class T>

class Vector

{private: int NrElementos;
T *columna;
public : Vector (int NrEleP)
          {NrElementos = NrEleP;
           columna = new T[NrElementos];
          }
void Llena(int Nr,T valor);
void Muestra();
T MiValor(int i) const {return (columna[i]);}
Vector operator +(Vector X);
int MiNr() const {return (NrElementos);}
};
 
template <class T> void Vector<T> :: Llena(int Nr,T valor)
{ columna[Nr] = valor;
}

template <class T> void Vector<T> :: Muestra()
{ for (int i=0;i<NrElementos;i++)
    { cout << columna[i] << "\n";
    }
  cout << "\n";
}
template <class T> Vector<T> Vector<T> :: operator + (Vector<T> X)
{ Vector temp(NrElementos);
  int i = 0;
  for (;i<NrElementos;i++)
   {temp.columna[i] = columna[i] + X.columna[i];
   }
  return (temp);
}

Como se ve hemos sustituido las palabras que designan los tipos de datos por la letra T.

Estas estructuras ser�n utilizadas en los programas como sigue:

#include "template.h"
void main()
{ int i=0;
  const cantidad=5;
  Vector <float> A(cantidad),B(cantidad),C(cantidad);
  for (;i<cantidad;i++)
    { A.Llena(i,i*2.3);
      B.Llena(i,i*3.4);
    }
  clrscr();
  A.Muestra();
  B.Muestra();
  C = B + A;
  C.Muestra();
  getch();
}

Como se ve simplemente con la declaraci�n

Vector <float> A(cantidad),B(cantidad),C(cantidad);

tenemos la posibilidad de trabajar con un vector de tipo float. Si quisieramos hacerlo con uno de tipo double bastar�a con cambiar el tipo dentro de los signos <>

Vector <double> A(cantidad),B(cantidad),C(cantidad);

el resto del programa se mantiene igual y se usar� la misma biblioteca.

arriba.jpg (2978 bytes) casa.jpg (31539 bytes)
Hosted by www.Geocities.ws

1