función virtual


En la programación orientada a objetos , en lenguajes como C++ y Object Pascal , una función virtual o método virtual es una función o método heredable y reemplazable para el cual se facilita el envío dinámico . Este concepto es una parte importante de la porción de polimorfismo (tiempo de ejecución) de la programación orientada a objetos (POO). En resumen, una función virtual define una función de destino que se ejecutará, pero es posible que el destino no se conozca en el momento de la compilación.

La mayoría de los lenguajes de programación, como JavaScript , Java , PHP y Python , tratan todos los métodos como virtuales por defecto [1] [2] y no proporcionan un modificador para cambiar este comportamiento. Sin embargo, algunos lenguajes proporcionan modificadores para evitar que las clases derivadas anulen los métodos (como la palabra clave final en Java [3] y PHP [4] ).

En la programación orientada a objetos , cuando una clase derivada hereda de una clase base, se puede hacer referencia a un objeto de la clase derivada a través de un puntero o referencia del tipo de clase base en lugar del tipo de clase derivada. Si hay métodos de clase base anulados por la clase derivada, el método realmente llamado por tal referencia o puntero puede vincularse (vincularse) ya sea 'anteriormente' (por el compilador), de acuerdo con el tipo declarado del puntero o referencia, o 'tarde' (es decir, por el sistema de tiempo de ejecución del lenguaje), según el tipo real del objeto al que se hace referencia.

Las funciones virtuales se resuelven 'tarde'. Si la función en cuestión es 'virtual' en la clase base, se llama a la implementación de la función de la clase más derivada de acuerdo con el tipo real del objeto al que se hace referencia, independientemente del tipo declarado del puntero o la referencia. Si no es 'virtual', el método se resuelve 'anticipadamente' y se selecciona de acuerdo con el tipo declarado de puntero o referencia.

Las funciones virtuales permiten que un programa llame a métodos que ni siquiera existen necesariamente en el momento en que se compila el código. [ cita requerida ]

En C++, los métodos virtuales se declaran anteponiendo la palabra clave a la declaración de la función en la clase base. Este modificador es heredado por todas las implementaciones de ese método en clases derivadas, lo que significa que pueden continuar anulándose entre sí y vincularse en tiempo de ejecución. E incluso si los métodos propiedad de la clase base llaman al método virtual, en su lugar llamarán al método derivado. La sobrecarga ocurre cuando dos o más métodos en una clase tienen el mismo nombre de método pero diferentes parámetros. Anular significa tener dos métodos con el mismo nombre de método y parámetros. La sobrecarga también se conoce como coincidencia de funciones y la anulación como asignación dinámica de funciones.virtual


Diagrama de Clase de Animal