Sesión 09: Sobrecarga (1) 1. 2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad.

Slides:



Advertisements
Presentaciones similares
Curso de java básico (scjp)
Advertisements

Métodos y parámetros.
Curso de java básico (scjp)
Clases en C++.
Definición de Clases y Variables de referencia.
Creación y destrucción de objetos
Ejemplo de Programa C++
Informática II Clase 12: Flujos Diego Fernando Serna Restrepo
Clases Extendidas La clase extendida hereda los campos y métodos de la clase de la cual extiende. La clase original se conoce como superclase y la clase.
Procedimientos y Funciones
POO en C++: Sintaxis En el .h debe aparecer la declaración de la clase: class NombreClase { private: // atributos y métodos privados public: // atributos.
FUNCIONES EN C.
Informática II Prof. Dr. Gustavo Patiño MJ
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO
Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.
Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.
Objetos y Clases en Java
Programación Orientada a Objetos en Java
Algoritmos y Estructuras de Datos Introducción al C++ Herencia.
Acciones y funciones Concepto
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
CI TEORIA semana 8 Subprogramas o funciones Definición de funciones.
Programación Orientada a Objetos usando C++
Modificadores.
Lic. Rosemary Torrico Bascopé
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Tema 6: Clases Antonio J. Sierra.
SCJP Sun Certified Programmer for Java 6
Semana 5 Subprogramas..
Capitulo # 4 herencia PROGRAMACION III UNIVERSIDAD
Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.
Computación II Unidad IV Funciones y Módulos. Objetivos: –Comprender como construir programas en forma modular partiendo de pequeñas partes conocidas.
PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++
PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++. 2 PROYECTOS EN C++
Administración de Proyectos de desarrollo de Software Ciclo de vida de un proyecto Enfoque moderno Temas Componentes Directivas Declaraciones globales.
Sobrecarga de operadores
FACULTAD DE ESTUDIOS SUPERIORES ARAGON
Manejo de Punteros y objetos en memoria dinámica en C++
Dinamismo y Contenedores Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires (C++ Avanzado) Depto. de Computación Algoritmos y Estructuras.
Elementos básicos del lenguaje
Elementos básicos del lenguaje
Constructor  Un constructor es un método que inicia un objeto inmediatamente después de su creación. De esta forma nos evitamos el tener que iniciar.
APUNTADORES.
Clases y Objetos en Java ELO329: Diseño y Programación Orientados a Objetos.
Programación Orientada a Objetos
Sesión 11: Herencia (1) – herencia simple /1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática.
Funciones y Clases Amigas (Friend)‏ Miembros Estáticos (Static)
Sesión 12: Herencia (2) – herencia múltiple /1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática.
Sesión 07: Manejo Dinámico de Memoria
Sesión 10: Sobrecarga (2) /1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad.
1 Asignación Dinámica de Memoria Agustín J. González ELO 329.
INTRODUCCION A LA PROGRAMACION
Sesión 06: Clases y Objetos (2)
LENGUAJE “C” Programación.
El lenguaje C++ Isidro González Caballero (Universidad de Oviedo) Técnicas de Comp. en Física Santander, 13/12/
6. Clases y Métodos..  6.1 Structs  6.2 Funciones  6.3 Namespaces  6.4 Clases.
 Las funciones son un conjunto de instrucciones que realizan una tarea específica. En general toman unos valores de entrada, llamados parámetros y proporcionan.
Funciones Copyright © 2005 Unidad 1. Copyright © 2005 Objetivos del Aprendizaje Explicar la naturaleza y usos de las funciones. Describir algunas funciones.
1 Definición y Conversión de datos Agustín J. González ELO-329.
Desarrollador Profesional de Juegos Programación III Unidad I Capturar Excepciones.
Desarrollador Profesional de Juegos Programación III Unidad I Excepciones Tipos.
Algunas Características de C++ no presentes en C Agustín J. González ELO-329.
PROCEDIMIENTOS Y FUNCIONES
Programación orientada a objetos La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos.
1 La sobrecarga de funciones y operadores le da al programador la oportunidad de asignar nuevos significados a las funciones y a los operadores.
Prof. Manuel B. Sánchez. Declaración de Objetos Una vez que la clase ha sido implementada se pueden declarar objetos como variables locales de métodos.
Constructores Los constructores inicializan nuestra clase, le dan un estado inicial estable listo para su uso. Siempre que declarábamos una variable numérica.
This y static. This Normalmente, dentro del cuerpo de un método de un objeto se puede referir directamente a las variables miembros del objeto. Sin embargo,
Prof. Manuel B. Sánchez. Es un mecanismo y uno de los pilares de la POO que permite definir nuevas clases a partir de otras preexistentes. La Herencia.
Transcripción de la presentación:

Sesión 09: Sobrecarga (1) 1

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia C ONTENIDO 2 Sobrecarga de Funciones 1 Sobrecarga de Métodos 2 Sobrecarga de Constructores 3 4 Valores por defecto

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia 3 Sobrecarga de Funciones

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia  Consiste en crear diferentes funciones con el mismo nombre, con el fin de ofrecer al usuario una manera más sencilla de recordar las funciones. TipoRetorno nomFuncion(Parametros 1); TipoRetorno nomFuncion(Parametros 2);... TipoRetorno nomFuncion(Parametros N); Donde: Los nombres de las funciones son iguales y Parametros 1 ≠ Parametros 2 ≠ … Parametros N 4 Sobrecarga de Funciones

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia Sobrecarga de Funciones  Con el fin de que el mecanismo de sobrecarga sea independiente del contexto, los valores devueltos por las funciones NO son tenidos en cuenta a efectos del mecanismo de sobrecarga. int func (int, char); int func (float, char); void func (int, char); 5

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia  Cuando se realiza la invocación de una función sobrecargada, el compilador decide cual de ellas se utilizará mediante un proceso denominado resolución de sobrecarga ("Overload resolution").  Se resuelve aplicando ciertas reglas para verificar cuál de las declaraciones se ajusta mejor de acuerdo a:  número de argumentos  tipo de los argumentos utilizados. 6 Sobrecarga de Funciones

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia  El proceso sigue unas reglas en el orden precedencia señalado: 1.Concordancia exacta en número y tipo. 2.Concordancia promociones de los tipos asimilables. Ejemplo: char, short, bool, a int. 3.Concordancia de conversiones estándar. Ejemplo: int a double; clase-derivada a clase-padre. 7 Sobrecarga de Funciones

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia  El proceso sigue unas reglas en el orden precedencia señalado: 4.Concordancia de conversiones definidas por el usuario. 5.Concordancia usando la elipsis (...) en funciones con número variable de parámetros. 8 Sobrecarga de Funciones

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia  Ejemplo:  Complejo 9 Sobrecarga de Funciones

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia C ONTENIDO 10 Sobrecarga de Funciones 1 Sobrecarga de Métodos 2 Sobrecarga de Constructores 3 4 Valores por defecto

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia 11 Sobrecarga de Métodos

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia  De la misma manera que ocurre con las funciones normales, en la definición de métodos puede ocurrir que varios métodos compartan el mismo nombre, pero difieran en el tipo y/o número de argumentos. De esta manera tendremos métodos sobrecargados. 12 Sobrecarga de Métodos

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia  Los métodos de las clases también pueden ser sobrecargados como el resto de las funciones, su sintaxis es prácticamente igual. class nombreClase { private: //Atributos public: //Métodos tipoRetorno nomMetodo (Parámetros 1); tipoRetorno nomMetodo (Parámetros N); }; 13 tipoRetorno nomMetodo (Parámetros 1); tipoRetorno nomMetodo (Parámetros N); Sobrecarga de Métodos

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia Sobrecarga de Métodos class carro{ private: int gGas; char *marca; int velMax; int vel; bool start; public: carro(); void arrancar(); void acelerar(); void acelerar(int increment); void frenar(); int getVel() const; ~carro(); }; 14 void carro::acelerar(){ if(--gGas<=0){ vel=0; } else{ vel++; } } void carro::acelerar(int increment){ if(--gGas<=0){ vel=0; } else{ vel+=increment; } }

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia  Ejemplo:  Complejo 15 Sobrecarga de Métodos

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia C ONTENIDO 16 Sobrecarga de Funciones 1 Sobrecarga de Métodos 2 Sobrecarga de Constructores 3 4 Valores por defecto

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia  Los constructores, al ser métodos especiales de las clases también pueden ser sobrecargados, y la manera de hacerlo es igual que el resto de los métodos.  ¡OJO!, los destructores no pueden ser sobrecargados, ¿Porque? 17 Sobrecarga de Constructores

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia Sobrecarga de Constructores class carro{ private: int gGas; char *marca; int velMax; int vel; bool start; public: carro(); carro(int _gGas,char *_marca,int _velMax); void arrancar(); void acelerar(); void acelerar(int increment); void frenar(); int getVel() const; ~carro(); }; 18 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; }

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia  Ejemplo:  Complejo 19 Sobrecarga de Constructores

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia  Adicionalmente de ser declarados automáticamente un constructor y un destructor por cuando no son declarados explícitamente por el usuario, el compilador provee un constructor sobrecargado llamado de constructor copia, que es llamado cada vez que se requiere una copia de un objeto. 20 #include using namespace std; carro Deportivo(10,"BMW",50); //carro carreras=Deportivo; carro carreras(Deportivo); //constructor copia por defecto int main() { cout<<Deportivo.getVelMax()<<endl; cout<<carreras.getVelMax()<<endl; return 0; } 50 Constructores Copia

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia  Cada vez que se crea una copia de un objeto "El constructor de copia” es ejecutado.  Por defecto, el constructor de copia simplemente copia cada miembro de una objeto hacia el nuevo objeto. Esta copia se denomina “Copia Superficial”.  Sintaxis del constructor de copia nombreClase (const tipoClase &variable); Constructor (const Clase &Objeto); 21 Constructores Copia

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia  Ejemplo:  Complejo 22 Constructores Copia

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia 23 La copia superficial es buena para casi todo tipo de variables; sin embargo, es muy fácil de romper cuando los atributos son punteros a datos en el Heap. Constructores Copia

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia  La solución para evitar problemas ocasionados por las copias superficiales, es usando los constructores de copia para que estos hagan la copia en diferentes espacios del Heap, realizando lo que se denomina como “Copia Profunda”. 24 Constructores Copia

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia 1 Cuando se pasa un objeto como argumento a una función o esta lo retorna, se hace una copia temporal de cada una de sus variables miembro. 2 Todo constructor de copia, toma como parámetro una referencia a un objeto de su misma clase. carro(const carro &deportivo); 25 Constructores Copia

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia 3 El objetivo del constructor de copia, es crear una copia exacta de cada variable miembro del objeto pasado como referencia (original). Este copia se denomina “superficial”. 4 Los constructores de copia superficiales funciona perfectamente cuando se trata de un objeto cuyos atributos no son punteros referenciados a variables u objetos alojados en el Heap (free store). 5 En algunas ocasiones se hace necesario definir personalmente un constructor de copia, que evite que se haga una copia errónea, donde se garantice la independencia de cada objeto con respecto a cada una de sus variables miembro (copia profunda). 26 Constructores Copia

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia Constructores Copia class carro{ private : int *gGas; char *marca; const int velMax; int vel; bool start; public : carro(); carro(int _gGas,char *_marca,int _velMax); //se declara el constructor de copia. carro(const carro &original); void arrancar(); void acelerar(); void acelerar(int increment); void frenar(); int getVel() const; int getVelMax() const; int getgGas() const; void setVelMax(int vel); ~carro(); }; 27 //constructor por defecto //incializacion en la etapa de inicialización carro::carro():gGas(0),marca(0),velMax(0),\ vel(0), start(false){ gGas=new int; } //El otro constructor //inicialización en la etapa de inicialización carro::carro(int _gGas,char *_marca, int _velMax): marca(_marca), velMax(_velMax){ gGas=new int; *gGas=_gGas; } //constructor de copia carro::carro(const carro &original):velMax(original.velMax){ //se hace una copia de cada una de las variables miembro marca=original.marca; vel=original.vel; start=original.start; gGas=new int; *gGas=original.getgGas(); } // Declaración de los otros métodos int carro::getVelMax() const{ return velMax; } carro::~carro(){ //Destructor delete gGas; gGas=0;//NULL } #include using namespace std; char marca[]= "BMW”; carro Deportivo(10,marca,50); carro carreras(Deportivo); //carro carreras=Deportivo; int main() { cout<<Deportivo.getVelMax()<<endl; cout<<carreras.getVelMax()<<endl; return 0; } 50

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia C ONTENIDO 28 Sobrecarga de Funciones 1 Sobrecarga de Métodos 2 Sobrecarga de Constructores 3 4 Valores por defecto

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia En el código anterior tenemos que uno de los constructores tiene argumentos de entrada planteados por defecto carro(int _gGas,char *_marca="mazda", int _velMax=80); carro Deportivo(10,"Renault"); Aquí no asignamos el último parámetro (int _velMax) al constructor, este es asignado por defecto como Valores por Defecto

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia No es posible en la llamada de este constructor en particular, por ejemplo asignar un valor al tercer argumento si no ha sido asignado antes el valor del segundo argumento por defecto. carro Deportivo(10,,50); //no tiene sentido En cualquier función, o método de una clase es posible instaurar los argumentos por defecto. 30 Valores por Defecto

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia 31

2009/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Circuitos Digitales III 2010/1 Informática II Universidad de Antioquia Bibliografía  Curso C++ con clase  Pagina de Referencia lenguaje C++:  n/exception/ n/exception/  pt/ pt/  Sams Teach yourselft C++ in 21 days: g1 32