Cómo agregar la referencia de un objeto en las clases de contenedor

Todos estamos familiarizados con un alias en C++ . Un alias significa otro nombre para alguna entidad. Entonces, una variable de referencia es un alias que es otro nombre para una variable/objeto existente, etc.

A continuación se muestra el programa para agregar referencia a una variable:

// C++ program to illustrate
// aliasing in variable
  
#include <bits/stdc++.h>
using namespace std;
  
void aliasing(int N)
{
    // Adding reference variable to
    // N using &
    int& a = N;
  
    // Print the value pointed by
    // reference variable
    cout << "Value of a: " << a << endl;
  
    // Update the value of N using
    // reference variable
    a = 100;
  
    cout << "After Update:" << endl;
  
    // Print the value of a and N
    cout << "Value of a :" << a << endl;
    cout << "Value of N :" << N << endl;
}
  
// Driver Code
int main()
{
    // Given number
    int N = 9;
  
    // Function Call
    aliasing(N);
    return 0;
}
Producción:

Value of a: 9
After Update:
Value of a :100
Value of N :100

Explicación: En el programa anterior, una variable a es un alias de la variable N , lo que significa que le hemos dado otro nombre a la variable N. Entonces, lo que sea que estemos haciendo con a , también afectará a N y viceversa.
Por lo tanto, cuando cambiamos el valor de a a 100 , el valor de N también cambia a 100.

Referencia de un objeto en clases de contenedores :
el método anterior es correcto para dar un alias a cualquier variable, pero en el caso de los contenedores , el método anterior generará un error de compilación porque los contenedores directamente no pueden almacenar las referencias, pero hay una forma alternativa de hacer lo mismo. La plantilla std::reference_wrapper en C++ STL se usa para dar referencia a cualquier contenedor en C++. El std::reference_wrapper es una plantilla de clase que envuelve una referencia en un objeto asignable y copiable. Se usa con frecuencia como un mecanismo para almacenar referencias dentro de contenedores estándar (como en vector , list, etc) que normalmente no pueden contener referencias.

A continuación se muestra el programa para agregar una referencia de un objeto en la clase contenedor:

// C++ program to illustrate aliasing
// in list containers in C++
#include <bits/stdc++.h>
using namespace std;
class gfg {
private:
    int a;
  
public:
    gfg(int a)
    {
        this->a = a;
    }
    void setValue(int a)
    {
        this->a = a;
    }
    int getValue()
    {
        return this->a;
    }
};
  
// Driver Code
int main()
{
    // Declare list with reference_wrapper
    list<reference_wrapper<gfg> > l;
  
    // Object of class gfg
    gfg obj(5);
  
    l.push_back(obj);
  
    // Print the value of a
    cout << "Value of a for object obj is "
         << obj.getValue() << endl;
  
    cout << "After Update" << endl;
  
    // Change the value of a for Object obj
    // using member function
    obj.setValue(700);
  
    // Print the value of a after Update
    cout << "Value of a for object obj is "
         << obj.getValue() << endl;
  
    cout << "\nValue stored in the list is ";
    for (gfg i : l)
        cout << i.getValue() << endl;
    return 0;
}
Producción:

Value of a for object obj is 5
After Update
Value of a for object obj is 700

Value stored in the list is 700

Explicación:
En el programa anterior, cuando se crea un objeto de la clase gfg, se llama al constructor y el valor de la variable a se inicializa a 5. Hemos almacenado la referencia del objeto en la lista y luego hemos cambiado el valor de la variable a a 700 llamando a la función miembro setValue() . Ahora, cuando veamos el valor de la propiedad a del objeto cuya referencia teníamos guardada en la lista. El valor almacenado es 700.

Publicación traducida automáticamente

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