APUNTES PROII 2º PARCIAL.

Documentos relacionados
El lenguaje C++ A partir del lenguaje C Entorno de programación Visual C++

Una lista de operadores que pueden o no sobrecargarse es la siguiente: Operadores que pueden sobrecargarse

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 3

Herencia y polimorfismo

TEMA 4 GESTIÓN DE ERRORES. Cristina Cachero, Pedro J. Ponce de León. 1 Sesión (1.5 horas) Versión 0.6 POO

Sobrecarga de operadores, listas

Polimorfismo de tipo (en la herencia)

Prof. Dr. Paul Bustamante

Punteros y Memoria Dinámica II

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 2

Prof. Dr. Paul Bustamante

Tema: Sobrecarga de Operadores.

PUBLICACIÓN DEL ENUNCIADO: Semana del 10 de noviembre de ENTREGA: Clase de laboratorio de la semana del 8 de diciembre de 2003.

Impresión por pantalla. 3. Indicar la salida por pantalla (2 puntos-20 minutos)

Manejo de Excepciones. Agustín J. González ELO329

Clases y Objetos en C++

Contenido. Prefacio Orígenes de la programación orientada a objetos... 1

Tema 2. Programación basada en objetos. Programación Avanzada Ingeniería Técnica en Informática de Gestión Jorge Badenas

Tema: Sobrecarga de Operadores Unarios. Sobrecarga de Funciones.

Sobrecarga de Operadores II

Objetos y memoria dinámica

Tema 6: Memoria dinámica

TEMA 4 GESTIÓN DE ERRORES. Cristina Cachero, Pedro J. Ponce de León. 1 Sesión (1.5 horas) Versión 0.6. Depto. Lenguajes y Sistemas Informáticos

Manejo de Punteros y objetos en memoria dinámica en C++ Agustín J. González ELO 329

Implementación de las Clases Pila, Cola, Lista y Arbol

Algoritmos y Estructuras de Datos Ingeniería en Informática, Curso 2º SEMINARIO DE C++ Sesión 1

Tema: Funciones Virtuales y Polimorfismo.

Tema: Funciones Virtuales y Polimorfismo.

HOJA DE EJERCICIOS 5 PROGRAMACIÓN CON EXCEPCIONES EN JAVA

OOP y C++ Indice. 0.1 Análisis orientado a objetos(1/4) Análisis orientado a objetos(2/4) 0.- OOP 1.- INTRODUCCIÓN.

Tema 6. Gestión dinámica de memoria

Herencia y Polimorfismo en C++

PROGRAMACIÓN ORIENTADA A OBJETOS 1/7/2009. Examen de Java. Nombre: DNI: Titulación:

ELO329: Diseño y Programación Orientados a Objetos 29 de Junio 2016

Estructuras de Datos y Algoritmos (ITIS). TAD Tree. Estructuras de Datos y Algoritmos (ITIS) Ingeniería Técnica en Informática de Sistemas, Curso 2º

Tema 7. Colas. José M. Badía, Begoña Martínez, Antonio Morales y José M. Badía. {badia, bmartine,

IMPLEMENTACIÓN DE PILAS CON LISTAS EN C++

INTRODUCCIÓN A LA POO EN C++

Sobre Carga de Operadores

Tres elementos esenciales de la programación orientada a objetos

Introducción a Java. Fernando Cerezal López. 24 Noviembre 2005

Segundo Certamen Tiempo: 100 minutos

Tema 5: Programación Orientada a Objetos en C++ Programación Orientada a Objetos Curso 2009/2010 Begoña Moros Valle

Manejo de Punteros y objetos en memoria dinámica en C++ Agustín J. González ELO 329

Introducción a C++ Índice

Programación orientada a objetos I

Implementación de las Clases Pila, Cola, Lista y Arbol

Un elemento de cualquier clase llamada Info; Un puntero a un nuevo nodo llamado sig; De tal forma una unión de nodos hace que tengamos una lista:

Conceptos básicos sobre C++

Programación Avanzada CONCEPTOS BÁSICOS DE IMPLEMENTACIÓN EN C++

Clases, Objetos y Métodos (II)

ÁRBOL BINARIO. T der. Árbol binario homogéneo es aquel cuyos nodos tienen grado 0 ó 2(no hay ninguno de grado 1).

Examen Teórico Convocatoria de Junio de 2012

Introducción a C++. Asignatura Estructuras de Datos Curso 2017/2018 ETSISI UPM

Tema: Arreglos de Objetos en C++.

Temas. Taller III 2007 Gentile,Vazquez

Informática Industrial I

PROGRAMACIÓN ORIENTADA A OBJETOS

Examen Junio- Grupo B Lunes 17 de Junio - Programación en C++ Pág. 1

Francisco Javier Peña Escobar Universidad del Valle

Polimorfismo. Métodos virtuales

Programación Orientada a Objetos en C#.NET CAPÍTULO 8 DELEGADOS. Ing. Bruno López Takeyas, M.C.

Asignación Dinámica de Memoria. Agustín J. González Versión original de Kip Irvine ELO 326: Seminario II 2do. Sem. 2001

Tema 3. Herencia. Programación Avanzada. Jorge Badenas

Prof. Dr. Paul Bustamante

Qué es Java? Un lenguaje de programación Un entorno de desarrollo Un entorno de aplicación Un entorno de despliegue Es similar en sintaxis de C + +.

Sebastián García Galán

3. LA HERENCIA. Necesidad de la herencia

Tema: Plantillas en C++.

1. Sobrecarga de operadores. 2. Métodos operadores unarios Operador de incremento (prefijo)

Ejercicios propuestos de. Programación orientada a objetos. con C++ Cristina Cachero Pedro J. Ponce de León

C O N T E N I D O. Presentación.. 1 Preguntas Unidades I y II Clases y Constructores. Respuesta corta. 8 Verdadero / Falso. 9 Opción Múltiple.

Creación de clases en C++ (I)

Programación 1 Tema 2. Lenguaje de programación y ejecución de un programa

Prof. Dr.Paul Bustamante

Tema: Tipos Abstractos de Datos (TAD s) en C++.

Manejo de Excepciones

Programación C++(3 Parte) Dr. Oldemar Rodríguez Rojas Maestría en Computación Universidad de Costa Rica

PROGRAMACIÓN ORIENTADA A OBJETOS 10/02/2009. Examen de Java. Nombre: DNI: Titulación:

Contenidos. Gestión dinámica de memoria. Gestión dinámica de memoria. Introducción. 1. Introducción 2. El operador NEW 3. El operador DELETE

Prof. Dr. Paul Bustamante

TEMA 8: Gestión dinámica de memoria

Definición y Conversión de datos. Agustín J. González ELO-329

Academia de computación de IE, ICA e ISISA. Unidad didáctica Programación Orientada a Objetos

INDICE 1. Introducción a Turbo C++ 2. Utilización de C++

Manejo de Clases y Objetos. Manejo de Clases y Objetos

Prueba N o 1. Programación II

Construcciones del Lenguaje Java

Tema 1. Programación modular. Programación Avanzada Ingeniería Técnica en Informática de Gestión Jorge Badenas

Introducción a la Programación orientada a objetos con C++

Escuela Politécnica Superior de Elche

Hoja de ejercicios del Tema 9

Transcripción:

APUNTES PROII 2º PARCIAL. MEMORIA DINÁMICA. Hay que distinguir entre: Estática: memoria que se reserva en tiempo de compilación. Dinámica: memoria que se reserva en tiempo de ejecución. 5 pasos: 1. Declaración de un puntero en la zona de atributos. 2. Reservar con el operador new la memoria en el constructor. 3. Validar que tenemos espacio en la memoria en el constructor. 4. Utilizar esa zona de memoria en donde queramos. 5. Eliminar la reserva con el operador delete en el destructor. Ejemplo: int main() { int num; int * puntero; //Paso 1. cout << "Introduzca el num de elementos:" cin num; puntero = new (nothrow) int [num]; //Paso 2. //nothrow devuelve un null si no se ha podido reservar esa memoria if(puntero == null){ //Paso 3. cerr << "Error de memoria dinámica"; exit (-1); for ( int i = 0; i < num; i++ ) { //Paso 4 cout << "Introduzca el valor" << i << endl; cin puntero[i]; // equivalente a *(puntero+i) delete [] puntero; //Paso 5. return 1;

SOBRECARGA DE OPERADORES. 1. FORMAS DE SOBRECARGAR. - Usando funciones amigas. - Usando funciones miembro. Funciones friend: es la función externa a la clase que tiene acceso a la parte privada de esta. 2. TIPOS DE OPERADORES. Operadores unarios. Ej.: a++; Sobrecargar como función friend: friend valor_retorno operator++(tipo_operando a); //prototipo de la función Sobrecargar como función miembro: valor_retorno operator++(); Operadores binarios. Ej.: a + b; Sobrecargar como función friend: friend valor_retorno+(tipo1_operador a, tipo2_operador b); //prototipo de la función Sobrecargar como función miembro: valor_retorno operator+(tipo_operator b); Ejemplo: Como función miembro: Complejo a(5.3, 2); Complejo b; a = a + b; Dentro de la clase Complejo:

Prototipo: Complejo operator+(complejo b); Su implementación: Complejo Complejo::operator+(Complejo b){ Complejo toret; toret.real = real + b.real; toret.imaginaria = imaginaria + b.imaginaria; return toret; Como función amiga: friend Complejo operator+(complejo a, Complejo b); //Prototipo dentro de la clase Complejo operator+(complejo a, Complejo b) { //Implementación de la función friend Complejo toret; toret.real = a.real + b.real; toret.imaginaria = a.imaginaria + b.imaginaria; return toret; Sobrecarga de operadores <<, >>. Siempre se implementan como función friend: Sobrecarga de << (operador de inserción): Como valor de retorno siempre ostream por referencia. El primer argumento es un flujo de salida y el segundo lo que queremos sacar por pantalla. Prototipo para la clase catalogo: friend ostream & operator<<(ostream & o, Catalogo c); Sobrecarga de >>(operadir de extracción): Como valor de retorno istream por referencia

Prototipo para la clase catálogo: friend istream & operator>>(istream & i, Catalogo & c); En el código de la sobrecarga, primero se implementa el destructor y luego el código del constructor de copia.

GESTIÓN DE EXCEPCIONES. Hay dos tipos de excepciones: las que genera el sistema y las que generamos nosotros. Sintaxis: try { //aquí irán todas las sentencias en las que se puede generar una excepción+ if(...) { throw nombre excepción //lanza una excepción catch(tipo 1 arg 1){ //puede o no tener argumentos. Es el manejador de excepciones. catch(tipo 2 arg 2){ // un try puede tener asociados varios catch catch(...){ //catch universal, maneja cualquier tipo de excepción Ejemplo: try { if ( temperatura < 0 ) throw "Mucho frío"; else if ( temperatura > 0 && temperatura < 30 ) throw temperatura; else throw "Mucho calor"; catch ( string c ) { cout << c; catch ( int c ) { cout << c; catch (... ) {... Se suele poner un único manejador en el main que controle todas las excepciones del programa. #include <exception> //La clase exception tiene una funcion definida what(); que visualiza la pila, hace un volcado de pila.

bad_alloc int * puntero; try{ puntero = new int [10]; catch(const bad_alloc & e){ cerr << e.what() << endl; Clase excepción: class Excepcion1{ Excepcion1(const string &d){ descripcion = d; //suele tener 2 constructores //aquí se le pasaría const char * descripcion void visualizar(){ cerr << descripcion; ; : string descripcion; o char * descripcion

HERENCIA Y COMPOSICIÓN. Tipos de relaciones existentes entre clases. Herencia = es_un Composición = contiene_un Se permiten 2 tipos de herencia. 1. Herencia simple. Clase base o clase padre + una o mós clases derivadas o hijo. Una clase únicamente puede heredar de una clase. Ejemplo: class Persona { : int edad; ; class Becario { : float beca; ; Becario heredará de persona. SINTAXIS: class Derivada: modificador clase_base { Derivada(arg Base + arg derivada): Base(nombre arg Base) {... //Lo que haga falta : //Lo que haga falta.

Ejemplo: class Persona { Persona(){edad=0 Persona(int e){edad=e : int edad; ; class Becario:public Persona { Becario(){beca = 0.0 Becario(int e, float b):persona(e) { beca = b; : float beca; MODIFICADOR CLASE BASE CLASE DERIVADA public public public INACCESIBLE public INACCESIBLE public INACCESIBLE 2. Herencia múltiple. Varias clases padre. Sintaxis: class Derivada:public Base1, public Base2 { Derivada(tipo nombre):base1(nombre_atributo),base2(nombre_atributo) {... ;

En el archivo.h pondríamos: class Derivada:public Base1, public Base2{ Derivada(tipo nombre); ; En herencia múltiple no podemos separar en.h y.ccp por que se producen errores.

LIGADURA DINAMICA. Hay 2 tipos de funciones virtuales: puras o normales. A las puras le asignamos la dirección 0 o null, sin código. En las normales se da la opción en la clase derivada de implementar o no. Si en la clase derivada se implementa se llama a esa, si no se llamará a la de la clase base. La clase en la que haya una función virtual se convierte en abstracta y su constructor se convierte en virtual. No podemos crear objetos de la clase base. La ligadura dinámica retrasa hasta tiempo de ejecución el linkado de una función con su código. Pasos: 1. Crear un puntero que apunte a una clase base que contenga alguna función virtual. 2. Darle la dirección de un objeto de una clase derivada al puntero. 3. Acceder mediante -> a la función virtual.