logo

Operador de resolució d'abast en C++

En C++, l'operador de resolució d'abast és :: . S'utilitza per als següents propòsits.

classificació de galleda

1) Per accedir a una variable global quan hi ha una variable local amb el mateix nom:



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

Sortida
Value of global x is 0 Value of local x is 10>

2) Per definir una funció fora d'una classe.

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

Sortida
fun() called>

3) Per accedir a les variables estàtiques d'una classe.

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

Sortida
Value of static x is 1 Value of local x is 3 Test::y = 2>

4) En cas d'herència múltiple: Si el mateix nom de variable existeix en dues classes avantpassats, podem utilitzar l'operador de resolució d'abast per distingir.



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

Sortida
A's x is 10 B's x is 20>

5) Per a l'espai de noms Si una classe que té el mateix nom existeix dins de dos espais de noms, podem utilitzar el nom de l'espai de noms amb l'operador de resolució d'àmbit per referir aquesta classe sense cap conflicte.

dataformat.format
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; }>

Sortida
favourite Language : python company Name : GFG_2.0>

6) Fes referència a una classe dins d'una altra classe: Si una classe existeix dins d'una altra classe, podem utilitzar la classe d'imbricació per referir-la a la classe imbricada mitjançant l'operador de resolució d'àmbit

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) Consulteu un membre de la classe base a l'objecte derivat: En el cas de tenir el mateix mètode tant a les classes base com a les derivades, podríem referir-nos a cadascuna mitjançant l'operador de resolució d'àmbit com a continuació.



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

Sortida
This is Base class This is Derived class>