Diferencia entre herencia única y múltiple en C++

Herencia única : la herencia única es aquella en la que la clase derivada hereda la clase base única de forma pública, privada o protegida. En herencia simple, la clase derivada usa las características o miembros de la clase base única. Se puede acceder a estos miembros de la clase base mediante una clase derivada o una clase secundaria de acuerdo con el especificador de acceso especificado durante la herencia de la clase principal o la clase base. 

Sintaxis:

Class DerivedClass_name : access_specifier Base_Class
{
    //Class's Body 
}; 

Ejemplo de Herencia Única: 

CPP

#include<iostream>
using namespace std;
class A {
public:
    int k = 1000;
    float salary = 80000;
};
class B : public A {
public:
    float bonus = 8000;
    void ts()
    {
        cout<<"Total salary.."<<(salary + bonus)<<endl;
    }
};
int main()
{
    B b1;
    cout<<"Salary:"<<b1.salary<<endl;
    cout<<"Bonus:"<<b1.bonus<<endl;
    b1.ts();
    return 0;
}

Producción:

Salary: 80000
Bonus: 8000
total salary..88000 

En este ejemplo, A es la clase base o clase principal y B es la clase derivada o clase secundaria. Herencia múltiple : La herencia múltiple es aquella en la que la clase derivada adquiere dos o más clases base. En la herencia múltiple, la clase derivada puede usar las características conjuntas de las clases base heredadas. Cada clase base es heredada por la clase derivada al notificar al especificador de acceso separado para cada una de ellas. Se puede acceder a los miembros de la clase base mediante una clase derivada o una clase secundaria de acuerdo con el especificador de acceso especificado durante la herencia de la clase principal o la clase base. 

C++

// Example:
 
#include<iostream>
using namespace std;
 
class A
{
    protected:
    int a;
    public:
        void set_A()
        {
            cout<<"Enter the Value of A=";
            cin>>a;
             
        }
        void disp_A()
        {
            cout<<endl<<"Value of A="<<a;
        }
};
 
 
class B: public A
{
    int b,p;
    public:
        void set_B()
        {
            set_A();
            cout<<"Enter the Value of B=";
            cin>>b;
        }
         
        void disp_B()
        {
            disp_A();
            cout<<endl<<"Value of B="<<b;
        }
         
        void cal_product()
        {
            p=a*b;
            cout<<endl<<"Product of "<<a<<" * "<<b<<" = "<<p;
        }
         
};
 
main()
{
     
    B _b;
    _b.set_B();
    _b.cal_product();
     
    return 0;
     
}

Producción

Enter the Value of A= 5
5
Enter the Value of B= 9
9

Product of 5 * 9 = 45

C++

// Example:
#include<iostream>
using namespace std;
 
class A
{
    protected:
    int a;
    public:
        void set_A(int x)
        {
             a=x;           
        }
        void disp_A()
        {
            cout<<endl<<"Value of A="<<a;
        }
};
 
class B: public A
{
    int b,p;
    public:
        void set_B(int x,int y)
        {
            set_A(x);
            b=y;
        }
         
        void disp_B()
        {
            disp_A();
            cout<<endl<<"Value of B="<<b;
        }
         
        void cal_product()
        {
            p=a*b;
            cout<<endl<<"Product of "<<a<<" * "<<b<<" = "<<p;
        }
         
};
 
main()
{
    B _b;
    _b.set_B(4,5);
    _b.cal_product();
     
    return 0;
}
Producción

Product of 4 * 5 = 20

Sintaxis:

Class DerivedClass_name : access_specifier Base_Class1, access_specifier Base_Class2
{
    //Class's Body 
}; 

Ejemplo de Herencia Múltiple: 

CPP

#include<iostream>
using namespace std;
class A {
public:
    float salary = 80000;
};
 
class B {
public:
    float bonus = 8000;
};
 
class C : public A, public B {
public:
    void ts()
    {
        cout<<"Total salary.."<<(salary + bonus)<<endl;
    }
};
int main()
{
    C b1;
    b1.ts();
    return 0;
}

Producción:

Total salary..88000 

En este ejemplo, A y B son las clases base y C es la clase derivada. 

C++

// Example:
 
#include <iostream> 
using namespace std; 
class A 
{ 
    protected: 
     int a; 
    public: 
    void get_a(int n) 
    { 
        a = n; 
    } 
}; 
   
 
class B 
{ 
    protected: 
    int b; 
    public: 
    void get_b(int n) 
    { 
        b = n; 
    } 
}; 
 
class C : public A,public B 
{ 
   public: 
    void display() 
    { 
        cout << "The value of a is : " <<a<< endl; 
        cout << "The value of b is : " <<b<< endl; 
        cout<<"Product of a and b is : "<<a*b; 
    } 
}; 
 
int main() 
{ 
   C c; 
   c.get_a(10); 
   c.get_b(20); 
   c.display(); 
   
    return 0; 
}
Producción

The value of a is : 10
The value of b is : 20
Product of a and b is : 200

Diferencia entre herencia única y múltiple:

S.NO herencia única Herencia múltiple
1. La herencia simple es aquella en la que la clase derivada hereda la clase base única. Mientras que la herencia múltiple es aquella en la que la clase derivada adquiere dos o más clases base.
2. En herencia simple, la clase derivada usa las características de la clase base única. Mientras está en herencia múltiple, la clase derivada usa las características conjuntas de las clases base heredadas.
3. La herencia única requiere poco tiempo de ejecución en comparación con la herencia múltiple debido a la menor sobrecarga. Mientras que la herencia múltiple requiere más tiempo de ejecución en comparación con la herencia única debido a una mayor sobrecarga.
4. La herencia única está muy cerca de la especialización. Por el contrario, la herencia múltiple está muy cerca de la generalización.
5. La herencia única se implementa como Class DerivedClass_name : access_specifier Base_Class{}; . Mientras que la herencia múltiple se implementa como Class DerivedClass_name : access_specifier Base_Class1, access_specifier Base_Class2, ….{}; .
6. La herencia única es simple en comparación con la herencia múltiple. Mientras que la herencia múltiple es compleja en comparación con la herencia única.
7. La herencia simple se puede implementar en cualquier lenguaje de programación. C++ admite la herencia múltiple, pero la herencia múltiple no se puede implementar en ningún lenguaje de programación (C#, Java no admite la herencia múltiple).
8. Árbol de herencia de construcciones de herencia única. Construcciones de herencia múltiple Gráfico acíclico dirigido por herencia (DAG).

Publicación traducida automáticamente

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