logo

Operador de resolución de alcance en C++

En C++, el operador de resolución de alcance es :: . Se utiliza para los siguientes propósitos.

1) Para acceder a una variable global cuando hay una variable local con el mismo nombre:



CPP
// C++ program to show that we can access a global variable // using scope resolution operator :: when there is a local  // variable with same name  #include  using namespace std; int x; // Global x int main() { int x = 10; // Local x cout << 'Value of global x is ' << ::x; cout << '
Value of local x is ' << x;  return 0; }>

Producción
Value of global x is 0 Value of local x is 10>

2) Definir una función fuera de una clase.

búsqueda lineal en java
CPP
// C++ program to show that scope resolution operator :: is // used to define a function outside a class #include  using namespace std; class A { public:  // Only declaration  void fun(); }; // Definition outside class using :: void A::fun() { cout << 'fun() called'; } int main() {  A a;  a.fun();  return 0; }>

Producción
fun() called>

3) Para acceder a las variables estáticas de una clase.

CPP
// C++ program to show that :: can be used to access static // members when there is a local variable with same name #include using namespace std; class Test {  static int x;  public:  static int y;   // Local parameter 'x' hides class member  // 'x', but we can access it using ::  void func(int x)   {   // We can access class's static variable  // even if there is a local variable  cout << 'Value of static x is ' << Test::x;  cout << '
Value of local x is ' << x;   } }; // In C++, static members must be explicitly defined  // like this int Test::x = 1; int Test::y = 2; int main() {  Test obj;  int x = 3 ;  obj.func(x);  cout << '
Test::y = ' << Test::y;  return 0; }>

Producción
Value of static x is 1 Value of local x is 3 Test::y = 2>

4) En caso de Herencia múltiple: Si existe el mismo nombre de variable en dos clases ancestrales, podemos utilizar el operador de resolución de alcance para distinguirlo.



CPP
// Use of scope resolution operator in multiple inheritance. #include using namespace std; class A { protected:  int x; public:  A() { x = 10; } }; class B { protected:  int x; public:  B() { x = 20; } }; class C: public A, public B { public: void fun() {  cout << 'A's x is ' << A::x;  cout << '
B's x is ' << B::x; } }; int main() {  C c;  c.fun();  return 0; }>

Producción
A's x is 10 B's x is 20>

5) Para espacio de nombres Si existe una clase con el mismo nombre dentro de dos espacios de nombres, podemos usar el nombre del espacio de nombres con el operador de resolución de alcance para hacer referencia a esa clase sin ningún conflicto.

C++
#include  #include  using namespace std; #define nline '
' // Global Declarations string name1 = 'GFG'; string favlang = 'python'; string companyName = 'GFG_2.0'; // You can also do the same thing in classes as we did in // our struct example class Developer { public:  string name = 'krishna';  string favLang = 'c++';  string company = 'GFG';  // Accessing Global Declarations  Developer(string favlang, string company)  : favLang(favlang)  , company(companyName)  {  } }; int main() {  Developer obj = Developer('python', 'GFG');  cout << 'favourite Language : ' << obj.favLang << endl;  cout << 'company Name : ' << obj.company << nline; }>

Producción
favourite Language : python company Name : GFG_2.0>

6) Hacer referencia a una clase dentro de otra clase: Si una clase existe dentro de otra clase, podemos usar la clase anidada para hacer referencia a la clase anidada usando el operador de resolución de alcance.

¿Qué son los selectores en CSS?
CPP
// Use of scope resolution class inside another class. #include  using namespace std; class outside { public:  int x;  class inside {  public:  int x;  static int y;  int foo();  }; }; int outside::inside::y = 5; int main() {  outside A;  outside::inside B; }>

7) Haga referencia a un miembro de la clase base en el objeto derivado: En el caso de tener el mismo método tanto en la clase base como en la derivada, podríamos referirnos a cada una mediante el operador de resolución de alcance como se muestra a continuación.



C++
// Refer to a member of the base class in the derived object. #include  class Base { public:  void func()  {  std::cout << 'This is Base class' << std::endl;  } }; class Derived : public Base { public:  void func()  {  std::cout << 'This is Derived class' << std::endl;  } }; int main() {  Derived obj;  obj.Base::func();  obj.func();  return 0; }>

Producción
This is Base class This is Derived class>