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; }
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; }
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