Polimorfismo en C++

 

La palabra “polimorfismo” significa tener muchas formas. En palabras simples, podemos definir el polimorfismo como la capacidad de un mensaje para mostrarse en más de una forma. Un ejemplo de la vida real de polimorfismo es una persona que al mismo tiempo puede tener diferentes características. Como un hombre al mismo tiempo es padre, esposo y empleado. Entonces, la misma persona exhibe un comportamiento diferente en diferentes situaciones. Esto se llama polimorfismo. El polimorfismo es considerado como una de las características importantes de la Programación Orientada a Objetos. En C++, el polimorfismo se divide principalmente en dos tipos:

  • Polimorfismo en tiempo de compilación
  • Polimorfismo en tiempo de ejecución
Polimorfismo en CPP

Tipos de polimorfismo

  1. Polimorfismo en tiempo de compilación : este tipo de polimorfismo se logra mediante la sobrecarga de funciones o la sobrecarga de operadores.
 
  • Sobrecarga de funciones : cuando hay varias funciones con el mismo nombre pero diferentes parámetros, se dice que las funciones están sobrecargadas . Las funciones se pueden sobrecargar cambiando el número de argumentos o/y cambiando el tipo de argumentos . Reglas de sobrecarga de funciones 

CPP

// C++ program for function overloading
#include <bits/stdc++.h>
  
using namespace std;
class Geeks
{
    public:
      
    // function with 1 int parameter
    void func(int x)
    {
        cout << "value of x is " << x << endl;
    }
      
    // function with same name but 1 double parameter
    void func(double x)
    {
        cout << "value of x is " << x << endl;
    }
      
    // function with same name and 2 int parameters
    void func(int x, int y)
    {
        cout << "value of x and y is " << x << ", " << y << endl;
    }
};
  
int main() {
      
    Geeks obj1;
      
    // Which function is called will depend on the parameters passed
    // The first 'func' is called 
    obj1.func(7);
      
    // The second 'func' is called
    obj1.func(9.132);
      
    // The third 'func' is called
    obj1.func(85,64);
    return 0;
} 
  • Producción:
value of x is 7
value of x is 9.132
value of x and y is 85, 64
  • En el ejemplo anterior, una sola función llamada func actúa de manera diferente en tres situaciones diferentes, lo cual es una propiedad del polimorfismo.
  • Sobrecarga de operadores : C++ también ofrece la opción de sobrecargar operadores. Por ejemplo, podemos hacer uso del operador de suma (+) para la clase de string para concatenar dos strings. Sabemos que la tarea de este operador es sumar dos operandos. Entonces, un solo operador ‘+’, cuando se coloca entre operandos enteros, los agrega y cuando se coloca entre operandos de string, los concatena. Ejemplo

CPP

// CPP program to illustrate
// Operator Overloading
#include<iostream>
using namespace std;
   
class Complex {
private:
    int real, imag;
public:
    Complex(int r = 0, int i =0)  {real = r;   imag = i;}
       
    // This is automatically called when '+' is used with
    // between two Complex objects
    Complex operator + (Complex const &obj) {
         Complex res;
         res.real = real + obj.real;
         res.imag = imag + obj.imag;
         return res;
    }
    void print() { cout << real << " + i" << imag << endl; }
};
   
int main()
{
    Complex c1(10, 5), c2(2, 4);
    Complex c3 = c1 + c2; // An example call to "operator+"
    c3.print();
}
  • Producción:
12 + i9
  • En el ejemplo anterior, el operador ‘+’ está sobrecargado. Por lo general, este operador se usa para sumar dos números (enteros o números de coma flotante), pero aquí el operador está hecho para realizar la suma de dos números imaginarios o complejos. Para obtener información detallada sobre la sobrecarga de operadores, visite este enlace.
  1. Polimorfismo en tiempo de ejecución : este tipo de polimorfismo se logra mediante la anulación de funciones.
    • La anulación de funciones se produce cuando una clase derivada tiene una definición para una de las funciones miembro de la clase base. Se dice que esa función base está anulada

CPP

// C++ program for function overriding
  
#include <bits/stdc++.h>
using namespace std;
  
class base
{
public:
    virtual void print ()
    { cout<< "print base class" <<endl; }
   
    void show ()
    { cout<< "show base class" <<endl; }
};
   
class derived:public base
{
public:
    void print () //print () is already virtual function in derived class, we could also declared as virtual void print () explicitly
    { cout<< "print derived class" <<endl; }
   
    void show ()
    { cout<< "show derived class" <<endl; }
};
  
//main function
int main() 
{
    base *bptr;
    derived d;
    bptr = &d;
       
    //virtual function, binded at runtime (Runtime polymorphism)
    bptr->print(); 
       
    // Non-virtual function, binded at compile time
    bptr->show(); 
  
    return 0;
} 
  • Producción:
print derived class
show base class
  • Para obtener más información sobre el polimorfismo en tiempo de ejecución, visite este enlace.

Este artículo es una contribución de Harsh Agarwal . 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 *