Click here to load reader
Upload
galen
View
57
Download
0
Embed Size (px)
DESCRIPTION
Plantillas. Tecnología de la Programación Javier Nieves Acedo. Si no queremos empezar la casa por el tejado. Hay que plantar unas buenas bases. Así que antes de la…. Hay que empezar con las plantillas …. Problema de Partida (1). En un proyecto… int Max( int a, int b) { - PowerPoint PPT Presentation
Citation preview
Sobrecarga de Funciones y Operadores
Tecnologa de la Programacin
Javier Nieves AcedoPlantillas
Si no queremos empezar la casa por el tejado
Hay que plantar unas buenas basesAs que antes de la
Hay que empezar con las plantillas
Problema de Partida (1)En un proyecto
int Max(int a, int b){ return a > b ? a: b;}void main(){ int i1, i2, iMayor; iMayor = Max(i1, i2);}
Problema de Partida (2)Y si quiero hacer esto
void main(){ int i1, i2, iMayor; float f1, f2, fMayor; char c1, c2, cMayor; iMayor = Max(i1, i2); fMayor = Max(f1, f2); cMayor = Max(c1, c2);}
ERROR7
Problema de Partida (3)Primera solucin:
Sobrecarga
int Max(int a, int b){ return a > b ? a: b;}float Max(float a, float b){ return a > b ? a: b;}char Max(char a, char b){ return a > b ? a: b;}
Problema de Partida (4)Segunda solucin:
Macros
#define MAX(a, b) (a) > (b) ? (a) : (b)No da Error pero no se comprueban los tipos de los datos
Problema de Partida (y4)Tercera solucin:
Plantillas
Entremos de lleno con los tipos genricos
Tipos Genricos (1)Plantillas == 3 forma de Polimorfismo
A funcin de una plantilla esEscribir cdigo genricoGenerar posteriormente funciones o clases
Tambin se llaman tipos parametrizados
Tipos Genricos (y 2)Cuando utilizarlasHaya que definir diferentes pero muy similares funciones o clases.
Hay dos tipos:Plantillas de FuncionesPlantillas de Clases
Y para programarlo
Plantillas Generadoras de Funciones (1)Sintaxis:
template funcin
Template es palabra reservada lista de identificadores precedidos de class (no OO) y separados por comas (,)Los identificadores son parmetros de sustitucin
Plantillas Generadoras de Funciones (2)Solucin al problema de partida (1):
template IDENT Max(IDENT a, IDENT b) { return a > b ? a : b; }
Plantillas Generadoras de Funciones (y 3)Solucin al problema de partida (y 2):
int Max(int, int);float Max(float, float);char Max(char, char);
void main(){ int i1, i2, iMayor; float f1, f2, fMayor; char c1, c2, cMayor; iMayor = Max(i1, i2); fMayor = Max(f1, f2); cMayor = Max(c1, c2);}
Plantillas Generadoras de Clases (1)Usan una sintaxis similar a las de funciones.
Con ellas se pueden generar ms de una clase con tipos diferentes.
Uso ms frecuenteContenedores (por ejemplo STL)
Plantillas Generadoras de Clases (2)Ejemplo (1):
const int TRUE = 1; const int FALSE = 0; template class Pila { private: TIPO * P; int Cim; int MaxLong;
Plantillas Generadoras de Clases (2)Ejemplo (2): public: Pila(int Tam = 1000) : MaxLong(Tam) { P = new TIPO[Tam]; Cim = -1; } ~Pila() {delete [] P;} void Push(TIPO El) {P[++Cim] = El;} TIPO Pop() {return(P[Cim--]);} TIPO Cima() {return(P[Cim]);} int Vacia() {return((Cim == -1 ? 1: 0));} int Llena() {return((Cim == MaxLong-1)?0: 1);}};
Plantillas Generadoras de Clases (y 3)Ejemplo (y 3): void main() { Pila PilaInt(10); Pila PilaChar(15); for (int i=65; i