Portacontenedores en C++

Podemos crear un objeto de una clase en otra y ese objeto será miembro de la clase. Este tipo de relación entre clases se conoce como contenedor o relación has_a ya que una clase contiene el objeto de otra clase. Y la clase que contiene el objeto y los miembros de otra clase en este tipo de relación se denomina clase contenedora .
El objeto que forma parte de otro objeto se denomina objeto contenido, mientras que el objeto que contiene otro objeto como su parte o atributo se denomina objeto contenedor.

Diferencia entre portacontenedores y herencia.

Portacontenedores
-> Cuando las características de la clase existente se desean dentro de su nueva clase, pero no su interfaz
para, por ejemplo,->
1) el sistema informático tiene un disco duro
2) el automóvil tiene un motor, chasis, volantes.

Herencia
-> Cuando desea forzar que el nuevo tipo sea del mismo tipo que la clase base.
por ejemplo->
1) el sistema informático es un dispositivo electrónico
2) El automóvil es un vehículo

Los empleados pueden ser de diferentes tipos, como se puede ver arriba. Puede ser un desarrollador, un gerente de recursos humanos, un ejecutivo de ventas, etc. Cada uno de ellos pertenece a Diferente dominio del problema pero las Características básicas de un empleado son comunes a todos.

Sintaxis para portacontenedores:

// Class that is to be contained
class first {
    .
    .
};

// Container class
class second {

    // creating object of first
    first f;
    .
    .
};

Los ejemplos a continuación explican mejor el Containership en C++.

Ejemplo 1:

// CPP program to illustrate
// concept of Containership
  
#include <iostream>
using namespace std;
  
class first {
public:
    void showf()
    {
        cout << "Hello from first class\n";
    }
};
  
// Container class
class second {
    // creating object of first
    first f;
  
public:
    // constructor
    second()
    {
        // calling function of first class
        f.showf();
    }
};
  
int main()
{
    // creating object of second
    second s;
}
Producción:

Hello from first class

Explicación: En la clase segundo tenemos un objeto de clase primero . Este es otro tipo de herencia que estamos presenciando. Este tipo de herencia se conoce como relación has_a , ya que decimos que la clase second tiene un objeto de first class first como miembro. Del objeto f llamamos primero a la función de clase .

Ejemplo 2:

#include <iostream>
using namespace std;
  
class first {
public:
    first()
    {
        cout << "Hello from first class\n";
    }
};
  
// Container class
class second {
    // creating object of first
    first f;
  
public:
    // constructor
    second()
    {
        cout << "Hello from second class\n";
    }
};
  
int main()
{
    // creating object of second
    second s;
}
Producción:

Hello from first class
Hello from second class

Explicación: en este programa, no hemos heredado la clase primero en la clase segunda , sino que tenemos un objeto de la clase primera como miembro de la clase segunda . Entonces, cuando se llama al constructor predeterminado de la clase segunda , debido a la presencia del objeto f de la primera clase en la segunda , se llama primero al constructor predeterminado de la clase primera y luego se llama al constructor predeterminado de la segunda clase .

Ejemplo 3:

#include <iostream>
using namespace std;
  
class first {
private:
    int num;
  
public:
    void showf()
    {
        cout << "Hello from first class\n";
        cout << "num = " << num << endl;
    }
  
    int& getnum()
    {
        return num;
    }
};
  
// Container class
class second {
    // creating object of first
    first f;
  
public:
    // constructor
    second()
    {
        f.getnum() = 20;
        f.showf();
    }
};
  
int main()
{
    // creating object of second
    second s;
}
Producción:

Hello from first class
num = 20

Explicación: con la ayuda de containership, solo podemos usar el miembro/función pública de la clase, pero no la protección o la privacidad . En la primera clase hemos devuelto la referencia con la ayuda de getnum . Luego lo mostramos mediante una llamada a showf .

Ejemplo 4

#include<iostream>
using namespace std;
  
class cDate
{
    int mDay,mMonth,mYear;
public:
    cDate()
    {
        mDay = 10;
        mMonth = 11;
        mYear = 1999;
    }
    cDate(int d,int m ,int y)
    {
        mDay = d;
        mMonth = m;
        mYear = y;
    }
    void display()
    {
        cout << "day" << mDay << endl;
        cout <<"Month" << mMonth << endl;
        cout << "Year" << mYear << endl;
    }
};
// Container class
class cEmployee         
{
protected:
    int mId;
    int mBasicSal;
    // Contained Object
    cDate mBdate;       
public:
    cEmployee()
    {
        mId = 1;
        mBasicSal = 10000;
        mBdate = cDate();
    }
    cEmployee(int, int, int, int, int);
    void display();
};
  
cEmployee :: cEmployee(int i, int sal, int d, int m, int y)
{
    mId = i;
    mBasicSal = sal;
    mBdate = cDate(d,m,y);
}
void cEmployee::display()
{
    cout << "Id : " << mId << endl;
    cout << "Salary :" <<mBasicSal << endl;
    mBdate.display();
}
  
  
int main()
{
    // Default constructor call
    cEmployee e1;           
    e1.display();
    // Parameterized constructor called
    cEmployee e2(2,20000,11,11,1999);
    e2.display();
    return 0;
}
output
Id : 1
Salary :10000
day 10
Month 11
Year 1999
Id : 2
Salary :20000
day 11
Month 11
Year 1999

Publicación traducida automáticamente

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