Programación Avanzada en C++ - · PDF file2008 © Luis Hernández...
Transcript of Programación Avanzada en C++ - · PDF file2008 © Luis Hernández...
![Page 1: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/1.jpg)
1Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Programación Avanzada en C++L. Hernández
![Page 2: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/2.jpg)
2Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
ProgramaciónOrientada a Objetos
![Page 3: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/3.jpg)
3Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Nuevas incorporaciones desde C
Espacio de utilización de una variable: se puede declarar variables en
cualquier parte del programa. variables globales
Acceso a variables ocultas.
![Page 4: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/4.jpg)
4Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Nuevas incorporaciones desde C
Referencias Nombre alternativo para una variable u objeto
int i=1;int &x=i;
Las variables x e i se refieren al mismo espacio de memoria.
Se tienen que inicializar siempre. Se utilizan en pase de parámetros a funciones donde se
quiera modificar su contenido. Memoria dinámica:
new tipo[tamaño]; delete [] puntero;
![Page 5: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/5.jpg)
5Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Nuevas incorporaciones desde C
Declaraciones de funciones Parámetros con valor por defecto. En funciones con varios parámetros:
• si el parámetro k-1 está definido por defecto, el parámetro k también tiene que estarlo.
Pase de parámetros por referencia.
![Page 6: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/6.jpg)
6Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Nuevas incorporaciones desde C
Operadores E/S: operador extracción: >> operador inserción: << Stream de entrada estándar: cin Stream de salida estándar: cout
![Page 7: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/7.jpg)
7Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Evolución hacia la POO
Objetivos de la evolución: Menor interconexión entre las partes de un programa. Ocultación de la información. Abstracción:
• que los componentes del S.W. sean lo más cercano posible a las ideas que componen el problema.
Re-utilización del código. Todos estos objetivos están relacionados, pero la
piedra angular es la ocultación de la información.
![Page 8: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/8.jpg)
8Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Programación con procedimientos
El programa se divide en dos partes: Algoritmos Datos
La parte algorítmica se estructura en procedimientos. Beneficios:
Abstracción de operaciones. Extensión del lenguaje. Re-utilización del código.
Inconvenientes: No existe una clara estructuración de los datos que los
relacione con los procedimientos que los manejan. Indefensión ante varios problemas:
• No se garantiza el correcto estado de las estructuras de información.
• No hay independencia de representación.
![Page 9: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/9.jpg)
9Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
FIFO: Programación con procedimientos No hay nada que impida que un programador haga un mal
uso de los datos. Ejemplo: confundir el uso de cola y cabeza.
No es posible garantizar que la cola se encuentra en un estado correcto.
¿Que sucede si un día queremos cambiar la estructura de los datos? Ejemplo: cambiar el vector de la cola por una lista enlazada.
• Tendría que re-escribir el programa. Realmente,¿qué parte del código es re-utilizable?.
![Page 10: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/10.jpg)
10Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
FIFO: Ocultación de la información Cierta parte de los datos y funciones sólo será accesible desde
ciertas funciones. Si el interfaz está bien definido, el estado de la cola siempre es
correcto. Si se cambia la estructura interna de los datos sólo hay que
cambiar las funciones del interfaz. Re-utilización del código. Se aprovecha:
la estructura de datos las funciones que la manejan
Ocultación de la información = Encapsulamiento de los datos
![Page 11: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/11.jpg)
11Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Formas de ocultación de la información
Módulos (Programación modular) Las funciones (procedimientos) y datos se agrupan en
diferentes ficheros (módulos). Para cada módulo se definen los procedimientos y datos
que se exportan. Sólo se puede acceder desde fuera del módulo a aquella
parte que ha sido exportada. Objetos (Programación orientada a objetos)
Un módulo se compone de dos partes: definición → Interfaz implementación → Código
de la interfaz y de la parte oculta.
![Page 12: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/12.jpg)
12Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Programación modular
Aportaciones de la modularidad Descomposición de un problema complejo en módulos
más simples. Re-utilización de los módulos existentes para desarrollar
nuevo software. Independencia de la implementación. Ocultación de la información.
Limitaciones de la modularidad Ejemplo: Sólo puedo tener una cola en mi programa.
![Page 13: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/13.jpg)
13Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Programación orientada a objetos
Los objetos son entidades que agrupan datos y procedimientos que operan sobre esos datos. modulo ≈ fichero objeto ≈ variable
Los objetos se caracterizan por tres propiedades: Estado Operaciones Identidad dentro del programa (=instanciación)
Una clase es la descripción de un conjunto de objetos similares. Los objetos son instancias de una clase.
Ejemplo: podemos definir la clase matriz y a partir de ella los objetos matriz1 y matriz2.
![Page 14: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/14.jpg)
14Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Clases y objetos
Clase: Abstracción de un conjunto de objetos
caracterizados por las mismas propiedades y los mismos comportamientos.
Objeto: Abstracción capaz de responder a una petición
del servicio de mensaje.
Un objeto es una instancia de una clase. La clase contiene su comportamiento y sus
propiedades. El objeto puede crearse dinámicamente en el
transcurso de la ejecución de un programa.
![Page 15: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/15.jpg)
15Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Objetos
El mensaje es el único medio de comunicación entre los objetos. Consiste en una petición explícita de una operación que
debe realizar el objeto Puede ser asociado a una llamada de procedimiento
![Page 16: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/16.jpg)
16Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
El concepto de objeto
Objeto: Entidad de programación con componentes de dos tipos: Estado: Datos Comportamiento: Procedimientos que manipulan los
datos con exclusividad. Cada objeto posee un interfaz que contiene los
servicios que oferta al exterior.
![Page 17: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/17.jpg)
17Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Programación orientada a objetos
Acceso convencional vs OO Comunicación entre objetos:
Un objeto pide un servicio a otro por medio de un mensaje: destinatario + operación + argumentos
![Page 18: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/18.jpg)
18Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Globalidad vs Localidad Programación modular
Aquí los datos son globales, son accesibles desde todos los procedimientos.
Programación por objetos: Aquí los datos son locales a cada objeto. Sólo son accesibles para los procedimientos
(operaciones) definidos en el objeto.
![Page 19: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/19.jpg)
19Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Clases y objetos
Clase vehiculo
Campos velocidad nombre precio cantidad
Métodos precioConIVA:
devolver (1,16*precio) darVelocidad:
devolver (velocidad) retirar(c):
cantidad cantidad c← añadir(c):
cantidad cantidad + c←
![Page 20: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/20.jpg)
20Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Declaración de clases
Declaración de la clase Definición de las
funciones de la clase Instanciación de la clase
![Page 21: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/21.jpg)
21Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Programa ejemplo: Pila
![Page 22: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/22.jpg)
22Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Programa ejemplo: Pila
![Page 23: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/23.jpg)
23Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Constructores y destructores Constructor
Función miembro de la clase que se ejecuta cuando se crea un objeto.
Podemos tener varios constructores en una clase, pero han de diferir en los parámetros.
Destructor Función miembro de la
clase que se ejecuta al final de la vida de cada objeto.
![Page 24: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/24.jpg)
24Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Utilización de constructores
Utilización de constructores: Sin parámetros: A a; Con un parámetro: A a(5); ó A a=5; Con varios parámetros: A a(5,3);
Constructores por defecto: Constructor copia:
• Crea un objeto b2 donde los datos de b2 serán iguales a los de b1.
• Aunque no se defina el constructor copia, éste existe para que se puedan pasar objetos como parámetros por valor.
Constructor sin parámetros:• Aunque no se defina, éste existe para que se puedan
definir objetos de la clase (no ejecuta nada).
![Page 25: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/25.jpg)
25Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Utilización de constructores Desaparición de constructores por defecto:
Constructor sin parámetros:• Desaparece cuando definimos cualquier otro constructor.
Constructor copia:• Desaparece cuando definimos un nuevo constructor copia.• Siempre hay un constructor copia, y solo uno, en cada
clase.
![Page 26: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/26.jpg)
26Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Constructor copia
Definición Utilización
![Page 27: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/27.jpg)
27Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Clases compuestas
Una clase donde algún dato miembro es un objeto de otra clase. ¿Cuál es el orden de construcción?
![Page 28: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/28.jpg)
28Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Expansión inline
Evitar llamadas a funciones. El compilador simula el
pase de parámetros.
![Page 29: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/29.jpg)
29Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Clases y funciones friend Funciones friend:
Una función ajena a la clase pueda acceder a la parte privada de la clase.
Clases friend: Todos los métodos de una clase puedan acceder a la
parte privada de otra clase.
![Page 30: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/30.jpg)
30Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Distinguir entre: variables miembro de una clase otro tipo de variables.
Operador resolución de ámbito “::”
Calificación de variables miembro
![Page 31: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/31.jpg)
31Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Palabra reservada this
Representa un puntero al objeto que recibe la llamada. Todos los objetos de todas las clases tienen this
como dato miembro.
![Page 32: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/32.jpg)
32Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Variables de clase e instancia Variables de clase:
común a todos los objetos (instancias) de una clase. Variables de instancia:
propio de cada objeto (instancia) de la clase.
![Page 33: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/33.jpg)
33Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Variables de clase e instancia
![Page 34: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/34.jpg)
34Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Funciones de clase Funciones de clase:
Actúan sobre variables de clase. Sólo pueden actuar sobre las variables de instancia de la
propia clase cuando pertenecen a un objeto: • pasado como parámetro.• declarado dentro de la propia función.
![Page 35: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/35.jpg)
35Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Punteros a objetos
Declaración de punteros a objetos de una clase. Utilización del operador new y delete:
Al ejecutarse el operador new, se llama al constructor de la clase automáticamente (malloc no lo hace).
delete llama al destructor (free no).
![Page 36: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/36.jpg)
36Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Ejemplo de vectoresy punteros a objetos
![Page 37: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/37.jpg)
37Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Herencia
![Page 38: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/38.jpg)
38Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Herencia
Definir una nueva clase: como extensión de otra previamente definida. sin modificar la ya existente.
La nueva clase hereda de la clase anterior: las variables. las operaciones .
Principal objetivo/ventaja: Reutilización del código.
• Ahorro de esfuerzo.• Mayor confianza en el código.
![Page 39: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/39.jpg)
39Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Organización jerárquica
![Page 40: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/40.jpg)
40Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Herencia en POO
Una función recibe un objeto de la clase base.void Despedir (empleado);
Una función puede recibir objetos de la clase base y también de sus derivadas.empleado e;empleado_producción ep;empleado_comerciales ec;Despedir (e);Despedir (ep);Despedir (ec);
![Page 41: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/41.jpg)
41Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Herencia de métodos y variables
Las clases derivadas reciben (=heredan) las variables y métodos de la clase base.Empleado_comercial ec;Empleado_produccion ep;ec.Cambiar_Sueldo();ep.Cambiar_Sueldo();
![Page 42: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/42.jpg)
42Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Composición y herencia
Composición: Relación tener-un
Un coche tiene un motor Contener un objeto.
Herencia: Relación ser-un
Un coche es un vehículo Contener una clase.
![Page 43: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/43.jpg)
43Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Ejemplos de composición y herencia
Clase persona y clase empleado. Herencia: un empleado es una persona.
Clase persona y clase domicilio. Composición: una persona tiene un domicilio.
Clase lista y clase nodo de la lista: Composición: una lista tiene un puntero de tipo nodo al
nodo que está en cabeza de la lista (tener-un). Clase empresa, clase empleado y clase jefe de grupo
de empleados. Herencia entre empleado y jefe.
• Un jefe es un empleado. Composición entre empresa y empleado o jefe.
• Una empresa puede tener una lista de empleados y otra de jefes.
• Por el principio de los subtipos, una empresa puede tener una única lista donde aparezcan tanto jefes como empleados.
![Page 44: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/44.jpg)
44Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Ejemplo de herencia
![Page 45: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/45.jpg)
45Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Ejemplo de herencia
Los miembros de la clase empleado se pueden utilizar en las clases derivadas tal y como si hubiesen sido definidos en éstas
![Page 46: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/46.jpg)
46Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Modos de acceso
private Lo que es “private” en la clase base no es accesible en
la clase derivada. public
Lo que definimos como “public” es accesible desde cualquier parte.
protected Lo que definimos como “protected” en la clase base:
• es accesible en la clases derivadas• no es accesible fuera de las clases derivadas o base.
![Page 47: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/47.jpg)
47Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Tipos de herencia public
los modos de acceso a los miembros de la clase base se quedan igual en la clase derivada.
protected los miembros “public” de la clase base pasan a ser
“protected”, el resto se queda igual. private
todos los miembros de la clase base pasan a ser “private” en la derivada.
![Page 48: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/48.jpg)
48Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Redefinición de miembros
A veces, interesa cambiar en la subclase la definición de algo que está en la clase base. Lo redefinido no desaparece.
![Page 49: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/49.jpg)
49Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Ejemplo de redefinición de miembros
![Page 50: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/50.jpg)
50Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Herencia múltiple Una clase derivada hereda
las características de más de una clase base.
![Page 51: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/51.jpg)
51Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Constructores y destructores
Construcción objeto clase derivada: Primero se construye la parte heredada de la clase(s)
base.• Se ejecutan los constructores de las clases base.
Por último se ejecuta el código del constructor de la clase derivada.
Destrucción objeto clase derivada: El proceso es a la inversa que en la construcción.
• Se ejecuta primero el destructor de la clase derivada y a continuación los de las clases base.
![Page 52: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/52.jpg)
52Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Ejemplo de constructores y destructores
Constructores y destructores en la herencia
![Page 53: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/53.jpg)
53Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Ejemplo de constructores y destructores
Constructores y destructores en clases compuestas y derivadas.
![Page 54: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/54.jpg)
54Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Ejemplo de constructores y destructores
Llamadas a los constructores de las clases base.
![Page 55: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/55.jpg)
55Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Ejemplo de constructores y destructores
![Page 56: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/56.jpg)
56Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Ejemplo de constructores y destructores
![Page 57: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/57.jpg)
57Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Clase base virtual
![Page 58: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/58.jpg)
58Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Herencia virtual
Si una clase base virtual define constructores, debe proporcionar uno de estos dos constructores: un constructor sin parámetros un constructor que admita valores por defecto para todos
los parámetros. Las clases derivadas de una clase base virtual tienen
que ser definidas como herencia virtual.
![Page 59: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/59.jpg)
59Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Ejemplo deHerencia virtual
![Page 60: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/60.jpg)
60Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Punteros a clases derivadas
![Page 61: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/61.jpg)
61Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Polimorfismo
![Page 62: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/62.jpg)
62Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Polimorfismo
El polimorfismo se refiere al hecho de que una misma función adopte múltiples formas. Esto se consigue por medio de la sobrecarga:
Sobrecarga de funciones:• un mismo nombre de función para distintas funciones.
a = Sumar(c,d);a = Sumar(c);
Sobrecarga de operadores:• un mismo operador con distintas funcionalidades.• Ejemplo: Sobrecargar el operador + sobre la clase cadena
para que permita concatenar dos de estos objetos:entero1 = entero2 + 5;cadena1 = cadena2 + cadena3;
![Page 63: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/63.jpg)
63Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Sobrecarga de constructores
Solo en caso de que no definamos ningún constructor, tenemos el constructor por defecto.
![Page 64: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/64.jpg)
64Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Sobrecarga de funciones
Tenemos 2 funciones costructor string().
Tenemos 4 posibles llamadas a 4 funciones diferentes strcmp(): 3 en la clase. 1 en la librería “string.h” de C.
Tenemos 2 funciones strcpy() en la clase.
![Page 65: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/65.jpg)
65Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Sobrecarga de funciones
En la sobrecarga de funciones se desarrollan distintas funciones con un mismo nombre pero distinto código. Las funciones que comparten un mismo nombre deben
tener una relación en cuanto a su funcionalidad. Aunque comparten el mismo nombre, deben tener
distintos parámetros de manera que el compilador pueda distinguir entre las distintas funciones cuando encuentra una llamada. Éstos pueden diferir en : número tipo orden
El tipo del valor de retorno de una función no es válido como distinción. Esto es debido a que ese valor en C++ no es necesario
que sea recogido por otro objeto.
![Page 66: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/66.jpg)
66Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Ejemplo de sobrecarga de funciones
![Page 67: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/67.jpg)
67Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Sobrecarga de operadores
Consiste en definir nuevas funcionalidades para los operadores definidos en el lenguaje. Se pueden sobrecargar prácticamente todos los
operadores del lenguaje: No podemos inventar nuevos operadores. No podemos re-definir funcionalidades de los
operadores que ya están definidas
![Page 68: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/68.jpg)
68Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Sobrecarga de operadores
Al menos uno de los operandos del operador sobrecargado debe ser una clase definida por nosotros La sobrecarga de operadores es un caso particular de
la sobrecarga de funciones: el operando de la izquierda puede pasar a ser el
propietario de la función, o bien el primer argumento de la función.
![Page 69: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/69.jpg)
69Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Sobrecarga de operadores
![Page 70: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/70.jpg)
70Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Sobrecarga de operadores
Para cualquier clase que se defina, el compilador define el operador asignación “=“.
Cuando no me sirve, debo re-definirlo.
![Page 71: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/71.jpg)
71Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Operador incremento y decremento
Tiene dos posibles notaciones: prefija: ++a postfija: a++
![Page 72: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/72.jpg)
72Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Operador subíndice
Devolución de una referencia: Se debe devolver una referencia cuando queremos que
se pueda modificar el propio objeto que se devuelve.
![Page 73: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/73.jpg)
73Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Operador subíndice
Ejemplo de utilización de índices dobles.
![Page 74: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/74.jpg)
74Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Conversión de clases
Un constructor de Y que reciba X permite al compilador convertir objetos de la clase X en objetos de la clase Y.
![Page 75: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/75.jpg)
75Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Operadores de conversión
Los constructores de una clase X: permiten definir qué otras clases pueden ser convertidas
en la clase X. Los operadores de conversión que se definen en una
clase X: permiten definir en qué otras clases se pueden convertir
la clase x.
![Page 76: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/76.jpg)
76Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Operadores de conversión
![Page 77: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/77.jpg)
77Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Ligadura dinámica Funciones virtuales:
Son una clase de sobrecarga de funciones, pero con la diferencia de:
• Sobrecarga de funciones: se decide que función se va a ejecutar en tiempo de compilación.
• Funciones virtuales: se decide en tiempo de ejecución (poliformismo en tiempo de ejecución).
![Page 78: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/78.jpg)
78Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Ligadura dinámica
Se ejecutará la función muestra() de alumno o de profesor dependiendo de la clase de objeto a la que apunte p (ligadura dinámica, en tiempo de ejecución).
La función persona::muestra() no se ejecuta porque es virtual y ha sido substituida en cada clase derivada.
Si no se hubiera definido como virtual la función muestra() en la clase persona se ejecutaría siempre persona::muestra()
![Page 79: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/79.jpg)
79Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Funciones virtuales
Cuando se define una función virtual: El prototipo debe ser el mismo en las clases base y derivadas.
Una función definida como virtual en una clase base: es virtual en todas sus clases derivadas, sea cual sea el nivel de
derivación. Puede ser re-definida o no en las clases derivada.
![Page 80: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/80.jpg)
80Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Clases abstractas
No tiene mucho sentido: definir código a la función figura:area() existan objetos de la clase figura
Solución: Podemos definir la clase figura como una clase abstracta.
![Page 81: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/81.jpg)
81Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Clases abstractas
Funciones virtuales puras: Las clases derivadas están obligadas a re-definirla.
![Page 82: Programación Avanzada en C++ - · PDF file2008 © Luis Hernández Programación en Ingeniería Electrónica | Programacion Avanzada en C++ 3 Nuevas incorporaciones desde C Espacio](https://reader030.fdocuments.ec/reader030/viewer/2022021419/5a7a01a57f8b9adf778beb9e/html5/thumbnails/82.jpg)
82Programación en Ingeniería Electrónica | Programacion Avanzada en C++2008 © Luis Hernández
Destructor virtual