Sobrecarga de funciones frente a anulación de funciones en C++

Sobrecarga de funciones (logrado en tiempo de compilación)

Proporciona múltiples definiciones de la función al cambiar la firma, es decir, cambiar el número de parámetros, cambiar el tipo de datos de los parámetros, el tipo de retorno no juega ningún papel. 

  • Se puede hacer tanto en la clase base como en la clase derivada.
  • Ejemplo: 
     
void area(int a);
void area(int a, int b); 

CPP

// CPP program to illustrate
// Function Overloading
#include <iostream>
using namespace std;
 
// overloaded functions
void test(int);
void test(float);
void test(int, float);
 
int main()
{
    int a = 5;
    float b = 5.5;
 
    // Overloaded functions
    // with different type and
    // number of parameters
    test(a);
    test(b);
    test(a, b);
 
    return 0;
}
 
// Method 1
void test(int var)
{
    cout << "Integer number: " << var << endl;
}
 
// Method 2
void test(float var)
{
    cout << "Float number: "<< var << endl;
}
 
// Method 3
void test(int var1, float var2)
{
    cout << "Integer number: " << var1;
    cout << " and float number:" << var2;
}

Producción: 
 

Integer number: 5
Float number: 5.5
Integer number: 5 and float number: 5.5

Anulación de función (logrado en tiempo de ejecución)
Es la redefinición de la función de clase base en su clase derivada con la misma firma, es decir, tipo de retorno y parámetros. 
 

  • Solo se puede hacer en clase derivada.
  • Ejemplo:
Class a
{
public: 
      virtual void display(){ cout << "hello"; }
};

Class b:public a
{
public: 
       void display(){ cout << "bye";}
};

CPP

// CPP program to illustrate
// Function Overriding
#include<iostream>
using namespace std;
 
class BaseClass
{
public:
    virtual void Display()
    {
        cout << "\nThis is Display() method"
                " of BaseClass";
    }
    void Show()
    {
        cout << "\nThis is Show() method "
               "of BaseClass";
    }
};
 
class DerivedClass : public BaseClass
{
public:
    // Overriding method - new working of
    // base class's display method
    void Display()
    {
        cout << "\nThis is Display() method"
               " of DerivedClass";
    }
};
 
// Driver code
int main()
{
    DerivedClass dr;
    BaseClass &bs = dr;
    bs.Display();
    dr.Show();
}

Producción: 
 

This is Display() method of DerivedClass
This is Show() method of BaseClass

Sobrecarga de función VS Anulación de función:

  1. Herencia: la anulación de funciones se produce cuando una clase se hereda de otra clase. La sobrecarga puede ocurrir sin herencia.
  2. Firma de la función: las funciones sobrecargadas deben diferir en la firma de la función, es decir, el número de parámetros o el tipo de parámetros deben diferir. Al anular, las firmas de funciones deben ser las mismas.
  3. Ámbito de las funciones: las funciones anuladas se encuentran en diferentes ámbitos; mientras que las funciones sobrecargadas están en el mismo ámbito.
  4. Comportamiento de las funciones: la anulación es necesaria cuando la función de clase derivada tiene que hacer algún trabajo adicional o diferente al de la función de clase base. La sobrecarga se usa para tener funciones del mismo nombre que se comportan de manera diferente según los parámetros que se les pasan.

Este artículo es una contribución de Mazhar Mik y Yash Singla . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
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 *