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

Templates C++

-Christian Loza
-Lucero Berrocal
April 13, 2015

Indice de contenidos
1 Introducci
on

2 Caractersticas

3 Ventajas y Desventajas

4 Ejemplos

Introducci
on

En la programaci
on cl
asica existen una clara diferenciacion entre datos y manipulacion de las mismas, normalmente existen una frecuente lista de manipulaciones que contienen un denominador com
un, es por ello que los
templates entran, tambien llamados tipos parametrizados, un mecanismo de C++ que permite que un tipo
pueda ser utilizado como par
ametro en la definicion de una clase o funcion.

Caractersticas

Usualmente se encuentra situaciones donde se desea hacer una operacion sea metodo o funcion que valide tipos
de datos, es donde entra templates el cual hara el codigo lo mas generico posible.
Para ello definir las funciones genericas se utilizara plantillas dando as una mayor re utilizacion de codigo.
Las funciones genericas son un mecanismo C++ que permite definir una funcion mediante uno o varios
par
ametros (tipos genericos)
A partir de estas plantillas el compilador es capaz de generar codigo de funciones distintas que comparten ciertas
caractersticas.
Se muestra en el siguiente c
odigo la utilizacion de una funcion maximo que retorna el valor ingresado, pero
no se especifica el tipo de valor que pueda ingresarse(int, float, double, long).
Sin templates
1
2
3
4
5
6
7
8
9
10

i n t maximo ( i n t a , i n t b ) {
i f ( a<b )
return b ;
return a ;
}
d o u b l e maximo ( d o u b l e a , d o u b l e b ) {
i f ( a<b )
return b ;
return a ;
}

Con templates
1
2
3
4
5
6

t e m p l a t e < c l a s s T>
T maximo (T a , T b ) {
i f ( a<b )
return b ;
return a ;
}

Tener una funci


on generica capaz de calcular el maximo de dos valores cualquier tipo.
La palabra reservada template indica que se va a declarar una plantilla. Se declaran en el .h y como tambien
cualquier tipo sea clase o no.
1
2
3
4

t e m p l a t e < c l a s s TIPO>
TIPO f u n c i o n (TIPO a ) {
...
}

Se pueden definir varias veces una funci


on con el mismo nombre.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

t e m p l a t e < c l a s s T>
T max(T a , T b ) {
...
}
t e m p l a t e < c l a s s T>
T max(T a , T b , T c ) {
...
}
t e m p l a t e < c l a s s T>
T max(T a r r [ ] , i n t t ) {
...
}
i n t main ( ) {
char c [ 5 ] = { 5 , 1 , 2 4 , 5 , 6 } ;
int a ;
float b;
double x ;
a=max ( 5 , 3 ) ;

19
20
21

b=max ( 4 . 5 , 1 . 0 , 4 . 3 ) ;
x=max( c , 3 ) ;
}

Los Templates pueden ser utilizados como metodos de clases.


Se muestra un ejemplo de templates en la clase punto.
1
2
3
4
5
6
7
8
9
10

// Punto . h
t e m p l a t e < c l a s s T>
c l a s s Punto {
public :
Punto ( i n t n ) ;
Punto ( ) ;
private :
T coorX ;
T coorY ;
};

1
2
3
4
5
6
7
8
9
10
11

// Punto . cpp
#i n c l u d e Punto . h
t e m p l a t e <c l a s s T>
Punto<T> : : Punto ( i n t n ) {
coorX=n ; coorY=n ;
}
t e m p l a t e <c l a s s T>
Punto<T> : : Punto ( ) {
}

Ventajas y Desventajas
Ventajas
Una funci
on generica define un conjunto de operaciones que se aplicaran a diferentes datos.
Un template especifica un conjunto infinito de funciones que puede ser aplicadas a distintos tipos de datos.
Un template describe propiedades genericas de una funcion.
El programador genera menos c
odigo
Desventajas
Una funci
on generica define un conjunto ilimitado de funciones sobrecargadas.
Los templates no generan c
odigo directamente.El codigo lo genera el compilador en el punto que ve que
se utiliza una plantilla.
El compilador genera m
as c
odigo,crear
a el codigo necesario para cada tipo optimizandolo para cada tipo.
Los templates pueden ser implementados solo en el .h.

Ejemplos

Calcula el valor promedio


1
2
3
4
5
6
7
8
9
10
11
12
13

// CalcPromedio . h
t e m p l a t e <c l a s s T>
c l a s s CalcPromedio {
public :
CalcPromedio ( ) ;
CalcPromedio ( ) ;
T c a l P r o m e d i o (T , i n t ) ;
private :
T sum ;
};
t e m p l a t e <c l a s s T>
CalcPromedio<T> : : CalcPromedio ( ) {

14
15
16
17
18
19
20
21
22
23
24
25
26
1
2
3
4
5
6
7
8
9
10
11

}
t e m p l a t e <c l a s s T>
CalcPromedio<T> : : CalcPromedio ( ) {
}
t e m p l a t e <c l a s s T>
T CalcPromedio<T> : : c a l P r o m e d i o (T a r r a y , i n t nElementos ) {
sum=0;
f o r ( i n t i =0; i <nElementos ; i ++)
sum+=a r r a y [ i ] ;
r e t u r n ( sum/ nElementos ) ;
}
// main . cpp
#i n c l u d e <i o s t r e a m >
#i n c l u d e CalcPromedio . h
u s i n g namespace s t d ;
i n t main ( ) {
int valores []={1 ,2 ,40 ,12 ,43};
CalcPromedio<i n t > cp ;
cout<<cp . c a l P r o m e d i o ( v a l o r e s ,5)<< e n d l ;
return 0;
}

Template con una funci


on suma.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

t e m p l a t e < c l a s s T>
c l a s s shape {
public :
shape ( ) ;
shape ( ) ;
T suma (T, T ) ;
private :
T coorX ;
T coorY ;
};
t e m p l a t e <c l a s s T>
i n l i n e shape<T> : : shape ( ) {
}
t e m p l a t e <c l a s s T>
i n l i n e shape<T> : : shape ( ) {
}
t e m p l a t e <c l a s s T>
T shape<T> : : suma (T a , T b ) {
coorX=a ;
coorY=b ;
r e t u r n ( coorX+coorY ) ;
}

Clase punto, divide un punto seg


un las coordenadas, implementado en .h y .cpp.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
1
2
3
4

// punto . h
#i f n d e f PUNTO H
#d e f i n e PUNTO H
t e m p l a t e < c l a s s T>
c l a s s Punto {
public :
Punto ( ) ;
Punto ( ) ;
T D i v i s i o n (T, T ) ;
private :
T puntoX ;
T PuntoY ;
};
// punto . cpp
#i n c l u d e Punto . h
t e m p l a t e < c l a s s T>
Punto<T> : : Punto ( ) {}

5
6
7
8
9
10
11
12

t e m p l a t e < c l a s s T>
Punto<T> : : Punto ( ) {}
t e m p l a t e < c l a s s T>
T Punto<T> : : D i v i s i o n (T a , T b ) {
t h i s >puntoX=a ;
t h i s >PuntoY=b ;
return
( PuntoY/puntoX ) ;
}

Bibliografa
[1] Adam Drozdek, Data Structures and ALGORITHMS in C++, Fourth Edition.
[2] Deitel, Como programar en C++, Sexta Edici
on.
[3] Kris Jamsa, Programaci
on exitosa, Segunda edici
on.

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