Operador de resolución de alcance frente a este puntero en C++

El operador de resolución de alcance es para acceder a miembros estáticos o de clase y este puntero es para acceder a miembros de objetos cuando hay una variable local con el mismo nombre.

Considere el siguiente programa C++:  

CPP

// C++ program to show that local parameters hide
// class members
#include <iostream>
using namespace std;
  
class Test {
    int a;
  
public:
    Test() { a = 1; }
  
    // Local parameter 'a' hides class member 'a'
    void func(int a) { cout << a; }
};
  
// Driver Code
int main()
{
    Test obj;
    int k = 3;
    obj.func(k);
    return 0;
}
Producción

3

Explicación: La salida para el programa anterior es 3 ya que la «a» pasada como argumento a la función sombrea la «a» de la clase, es decir, 1 

Luego, cómo generar la clase ‘a’. Aquí es donde este puntero es útil. Una declaración como cout <<this->a en lugar de cout << a puede simplemente generar el valor 1 ya que este puntero apunta al objeto desde donde se llama a func .

CPP

// C++ program to show use of this to access member when
// there is a local variable with same name
#include <iostream>
using namespace std;
class Test {
    int a;
  
public:
    Test() { a = 1; }
  
    // Local parameter 'a' hides object's member
    // 'a', but we can access it using this.
    void func(int a) { cout << this->a; }
};
  
// Driver code
int main()
{
    Test obj;
    int k = 3;
    obj.func(k);
    return 0;
}
Producción

1

¿Qué hay del Operador de resolución de alcance ? 

No podemos usar el operador de resolución de alcance en el ejemplo anterior para imprimir el miembro ‘a’ del objeto porque el operador de resolución de alcance solo se puede usar para un miembro de datos estáticos (o miembros de clase). Si usamos el operador de resolución de alcance en el programa anterior, obtenemos un error del compilador y si usamos este puntero en el programa a continuación, también obtenemos un error del compilador.

CPP

// C++ program to show that scope resolution operator can be
// used to access static members when there is a local
// variable with same name
#include <iostream>
using namespace std;
  
class Test {
    static int a;
  
public:
    // Local parameter 'a' hides class member
    // 'a', but we can access it using ::
    void func(int a) { cout << Test::a; }
};
  
// In C++, static members must be explicitly defined
// like this
int Test::a = 1;
  
// Driver code
int main()
{
    Test obj;
    int k = 3;
    obj.func(k);
    return 0;
}
Producción

1

Este artículo es una contribución de Aakash Sachdeva . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo y enviarlo 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 *