clase08_20131_Sobrecarga

43
Informática II Clase 8: Sobrecarga 1

description

sobrecarga c++

Transcript of clase08_20131_Sobrecarga

PowerPoint Template

Informtica IIClase 8: Sobrecarga1Contenido2Sobrecarga de Funciones1Constructores Copia2Sobrecarga de operadores34Sobrecarga de operadoresSobrecargado de FuncionesConsiste en crear diferentes funciones con el mismo nombre, con el fin de ofrecer al usuario una manera ms sencilla de recordar las funciones.

//Algunos protototiposint funcion(int);int funcion(long, long);int funcion(long);3Sobrecargado de FuncionesCuando se realiza la invocacin de una funcin sobrecargada, el compilador decide cual de ellas se utilizar mediante un proceso denominadoresolucin de sobrecarga("Overload resolution").

Se resuelve aplicando ciertas reglas para verificar cual de las declaraciones se ajusta mejor al nmero y tipo de los argumentos utilizados.4Sobrecargado de FuncionesEl proceso sigue unas reglas en el orden precedencia sealado:Concordancia exacta en nmero y tipo.Concordancia promociones de los tipos asimilables.Ejemplo:char,short,bool,aint.Concordancia de conversiones estndar.Ejemplo:intadouble;clase-derivada a clase-padre.Concordancia de conversiones definidas por el usuario.Concordancia usando la elipsis (...) en funciones con nmero variable de parmetros.

5Sobrecargado de los mtodos de las clasesLos mtodos de las clases tambin pueden ser sobrecargados como el resto de las funciones, su sintaxis es prcticamente igual.

class Rectangulo{public:// funcin DibujarFigura sobrecargada de la clasevoid DibujarFigura() const;void DibujarFigura(int unAncho, int unaAltura) const;private:int suAncho;int suAltura;};6void DibujarFigura() const;void DibujarFigura(int unAncho, int unaAltura) const;Sobrecargado de los mtodos de las clasesLos constructores, al ser mtodos especiales de las clases tambin pueden ser sobrecargados, y la manera de hacerlo es igual que el resto de los mtodos.

OJO!, los destructores no pueden ser sobrecargados, Porque?7Ejemplo Sobrecarga8class carro{private:int gGas;char *marca;int velMax;int vel;bool start;public:carro();carro(int _gGas,char *_marca="mazda",\ int _velMax=80);void arrancar();void acelerar();void acelerar(int increment);void frenar();int getVel() const;~carro();};

carro::carro(){gGas=0;marca=0;velMax=0;vel=0;start=false;}carro::carro(int _gGas,char *_marca, int _velMax){gGas=_gGas;marca=_marca;velMax=_velMax;vel=0;}void carro::acelerar(){if(--gGas