Enlace temprano y enlace tardío en C++

La vinculación se refiere al proceso de convertir identificadores (como nombres de variables y de rendimiento) en direcciones. El enlace se realiza para cada variable y función. Para las funciones, significa hacer coincidir la llamada con la definición de función correcta por parte del compilador. Tiene lugar en tiempo de compilación o en tiempo de ejecución.

cpp-binding

Early Binding (polimorfismo de tiempo en tiempo de compilación) Como su nombre lo indica, el compilador (o enlazador) asocia directamente una dirección a la llamada de función. Reemplaza la llamada con una instrucción en lenguaje de máquina que le dice al mainframe que salte a la dirección de la función.

Por defecto, el enlace anticipado ocurre en C++. El enlace tardío (discutido a continuación) se logra con la ayuda de la palabra clave virtual )

// CPP Program to illustrate early binding.
// Any normal function call (without virtual)
// is binded early. Here we have taken base
// and derived class example so that readers
// can easily compare and see difference in
// outputs.
#include<iostream>
using namespace std;
    
class Base
{
public:
    void show() { cout<<" In Base \n"; }
};
    
class Derived: public Base
{
public:
    void show() { cout<<"In Derived \n"; }
};
    
int main(void)
{
    Base *bp = new Derived;
  
    // The function call decided at 
    // compile time (compiler sees type
    // of pointer and calls base class
    // function.
    bp->show();  
  
    return 0;
}

Producción:

In Base

Enlace tardío: (polimorfismo en tiempo de ejecución) En esto, el compilador agrega código que identifica el tipo de objeto en tiempo de ejecución y luego hace coincidir la llamada con la definición de función correcta (consulte esto para obtener más detalles). Esto se puede lograr declarando una función virtual .

// CPP Program to illustrate late binding
#include<iostream>
using namespace std;
    
class Base
{
public:
    virtual void show() { cout<<" In Base \n"; }
};
    
class Derived: public Base
{
public:
    void show() { cout<<"In Derived \n"; }
};
    
int main(void)
{
    Base *bp = new Derived;
    bp->show();  // RUN-TIME POLYMORPHISM
    return 0;
}

Producción:

In Derived

Publicación traducida automáticamente

Artículo escrito por Himanshi_Singh 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 *