Click here to load reader

Plantillas

  • 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