¿Se pueden insertar funciones virtuales en C++?

Las funciones virtuales son funciones miembro que se declaran en la clase base mediante la palabra clave virtual y pueden ser anuladas por la clase derivada. Se utilizan para lograr el polimorfismo en tiempo de ejecución o, por ejemplo, enlace tardío o enlace dinámico. 

Las funciones en línea se utilizan para reemplazar la ubicación de llamada de la función con la definición de la función en línea en tiempo de compilación. Se utilizan para la eficiencia. La idea general detrás de las funciones en línea es que cada vez que se llama a una función en línea, el código de la función en línea se inserta o se sustituye en el punto de la llamada de función en línea en el momento de la compilación. Las funciones en línea son muy útiles cuando las funciones pequeñas se usan con frecuencia y se llaman muchas veces en un programa. 

De forma predeterminada, todas las funciones definidas dentro de la clase se consideran implícita o automáticamente como en línea, excepto las funciones virtuales. 

Nota: en línea es una solicitud al compilador y la elección de sus compiladores de hacer o no en línea.

¿Pueden las funciones virtuales estar en línea?

Cada vez que se llama a una función virtual utilizando una referencia de clase base o un puntero, no se puede incorporar porque la llamada se resuelve en tiempo de ejecución, pero siempre que se llama utilizando el objeto (sin referencia o puntero) de esa clase, se puede incorporar porque el compilador conoce la función exacta. clase del objeto en tiempo de compilación.
 

C++

// CPP program to demonstrate that
// virtual functions can be inlined
#include <iostream>
using namespace std;
 
class Base {
public:
    virtual void who() { cout << "I am Base\n"; }
};
class Derived : public Base {
public:
    void who() { cout << "I am Derived\n"; }
};
 
int main()
{
    // Part 1
    Base b;
    b.who();
 
    // Part 2
    Base* ptr = new Derived();
    ptr->who();
 
    return 0;
}
Producción

I am Base
I am Derived

Explicación: En la Parte 1, la función virtual who() se llama a través del objeto de la clase. Dado que se resolverá en tiempo de compilación, se puede insertar en línea. En la Parte 2 , la función virtual se llama a través de un puntero, por lo que no puede estar en línea.

Este artículo es una contribución de Meet Pravasi . Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *