Está en la página 1de 10

INSTITUTO POLITECNICO NACIONAL

ESCUELA SUPERIOR DE INGENIERIA MECÁNICA Y ELÉCTRICA


INGENIERÍA EN COMUNICACIONES Y ELECTRÓNICA

INGENIERÍA EN COMUNICACIONES Y ELECTRÓNICA


ACADEMÍA DE COMPUTACIÓN
ASIGNATURA: PROGRAMACIÓN ORIENTADA A OBJETOS.

GRUPO: 2CM9. PERIODO: 2do / 2021.


29SA - T301 - Investigación del Tema de Template - (PP)
HORARIO LUN MAR MIE JUE VIE
ZOOM: 10:00 10:00 10:00 10:00
11:30 11:30 11:30 11:30

ALUMN@S DE LA SECCIÓN: 29SA.


KARDEX: 2928. NOMBRE: Trejo Cruz Paulina Lizette
KARDEX: 2929. NOMBRE: Vázquez García Naomi Quetzalli.
  Victoria Paredes Martin.
KARDEX: 2930. NOMBRE:
 PROFESOR TÍTULAR: PROF. RODRIGO BAHENA PEDROZA.
ASISTENTE PARTÍCULAR: ING. AGUSTÍN ARMANDO AGUILAR AGUILAR.
¿QUÉ ES?
Una función virtual es una función
que es declarada como 'virtual' en
una clase base y es redefinida en
una o mas clases derivadas.
Además, cada clase derivada
puede tener su propia versión de la
función virtual. Lo que hace
interesantes a las funciones
virtuales es que sucede cuando
una es llamada a través de un
puntero de clase base ( o
referencia ).
FUNCIONES

En POO, cuando una clase


Si hay funciones de la clase base
derivada hereda de una clase Cuando un objeto derivado es
redefinidas por la clase
base, un objeto de la clase referido como del tipo de la
derivada, aparece un problema
derivada puede ser referido base, el comportamiento de la
cuando un objeto derivado ha
tanto como del tipo de la clase llamada a la función deseado es
sido referido como del tipo de la
base como del tipo de la clase ambiguo.
clase base.
derivada.
Cuando se aplica a métodos de clase, el especificador virtual debe ser utilizado en la declaración,
SINTAXIS

pero no en la definición si esta se realiza offline (fuera del cuerpo de la clase).

class CL {
  ...
  virtual void func1();
  virtual void func2();
  virtual void func3()
{ ... }    // Ok. definición
inline
};
virtual void CL::func1()
{ ... }  // Error!!
void CL::func2()
{ ... }          // Ok.
definición offline
SINTAXIS

Para declarar que un método de una clase base es virtual, su prototipo se declara como siempre,
pero anteponiendo la palabra-clave virtual

virtual void dibujar();


El polimorfismo en tiempo de ejecución solo se consigue cuando se accede a una función virtual
mediante un puntero a la clase base, de esta forma, para una función virtual se tienen que tener en
cuenta estas reglas
REGLAS

Las funciones virtuales tiene que ser miembros de una clase.

No pueden ser miembros estáticos

Se accede a ellas usando punteros a objetos.

Una función virtual puede ser afín a otra clase.

Los prototipos de la versión de la clase base de una función virtual y todas las versiones de las clases derivadas
tienen que ser iguales. Si dos funciones con el mismo nombre tienen prototipos diferentes, C++ las considera como
funciones sobrecargadas, ignorando el mecanismo de las funciones virtuales.
No se puede tener constructores virtuales pero si podemos tener destructores virtuales
REGLAS

Aunque un puntero base puede apuntar a cualquier tipo de objeto derivado, lo inverso no es cierto. Es decir, no
podemos usar un puntero a una clase derivada para acceder a un objeto del tipo base.

Cuando un puntero base apunta a una clase derivada, al incremento o decrementarlo no apuntará al siguiente
objeto de la clase derivada. Es incrementado o decrementado en relación con su tipo de base. Por tanto, no
debemos usar este método para desplazar el puntero al objeto siguiente.

Una función virtual tiene que ser definida en una clase base, aunque no se use en la misma.

Si se define una función virtual en la clase base, no necesita ser redefinida obligatoriamente en la clase derivada.
En estos casos, las llamadas invocaran a la función base.
VI RT UAL Y NO

Distinguir entre virtual y no virtual sirve Si no es virtual, se llamará a la función


para resolver este problema. Si la función de la clase base.
VI RT UAL

en cuestión es designada "virtual", se


llamará a la función de la clase derivada Por ejemplo, una clase base Animal,
(si existe). podría tener una función virtual come.
Definimos una clase-base B, en
EJEMPLO

la que definimos una función


virtual fun; a continuación
derivamos de ella dos
subclases D1 y D2, en las que
definimos sendas versiones
de fun que solapan la versión
existente en la clase-base.
REFERENCI
• https://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C%2B%2B/
Funciones_virtuales#:~:text=Una%20funci%C3%B3n%20virtual%20es%20una,una%20o%20mas
%20clases%20derivadas.&text=En%20esta%20situacion%2C%20C%2B%2B%20determina,objeto
%20apuntado%20por%20el%20puntero.

• https://docs.microsoft.com/es-es/cpp/cpp/virtual-functions?view=msvc-160
AS

• https://www.zator.com/Cpp/E4_11_8a.htm

• https://jonsegador.com/2013/06/funciones-virtuales-en-c/

• http://cidecame.uaeh.edu.mx/lcc/mapa/PROYECTO/libro15/36_funciones_virtuales.html

También podría gustarte