Pontificia Universidad Javeriana Departamento de Ingeniería de

Anuncio
Pontificia Universidad Javeriana
Departamento de Ingeniería de Sistemas
Programación de Computadores
Introducción a plantillas, 2016-30
El uso de plantillas permite que en la definición de Tipos Abstractos de Datos se utilice un tipo
de dato genérico, y luego al momento de usar esos TADs se identifica cuál tipo de dato particular
se requiere usar.
Considere la definición de la siguiente estructura:
struct calc {
int x;
int y;
int multiply();
int add();
};
// implementacion operacion multiplicar
int calc::multiply() {
return x*y;
}
// implementacion operacion sumar
int calc::add() {
return x+y;
}
Esta estructura, tal y como está definida, sólo puede operar con números enteros. El siguiente
fragmento de código muestra cómo se podría hacer uso de esta clase en el procedimiento
principal:
calc objeto;
objeto.x = 3;
objeto.y = 2;
int c = objeto.add();
int d = objeto.multiply();
Para generalizar su definición, y así permitir que opere con diferentes tipos de datos (como
reales), se le agrega la definición de plantilla, así:
template <class T>
struct calc {
T x;
T y;
T multiply();
T add();
};
// implementacion operacion multiplicar
template <class T>
T calc<T>::multiply() {
return x*y;
}
// implementacion operacion sumar
template <class T>
T calc<T>::add() {
return x+y;
}
Justo antes de la definición de cada clase y función, se incluye la palabra reservada template y
el nombre del tipo de dato genérico que se va a utilizar (en este caso, T). Luego, dentro de cada
dato y función, se utiliza el tipo de dato genérico para indicar las operaciones. El siguiente
fragmento de código muestra entonces cómo se puede hacer uso de la nueva estructura
genérica dentro del procedimiento principal:
calc<int> objetoI;
objetoI.x = 3;
objetoI.y = 2;
int c = objetoI.add();
int d = objetoI.multiply();
calc<float> objetoF;
objetoF.x = 3.5;
objetoF.y = 5.2;
float z = objetoF.add();
float w = objetoF.multiply();
Descargar