Академический Документы
Профессиональный Документы
Культура Документы
-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 ;
}
t e m p l a t e < c l a s s TIPO>
TIPO f u n c i o n (TIPO a ) {
...
}
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 ) ;
}
// 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
// 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;
}
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 ) ;
}
// 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.