logo

Operátor rozlišení rozsahu v C++

V C++ je operátor rozlišení rozsahu :: . Používá se pro následující účely.

1) Pro přístup ke globální proměnné, když existuje lokální proměnná se stejným názvem:



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

Výstup
Value of global x is 0 Value of local x is 10>

2) Definovat funkci mimo třídu.

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

Výstup
fun() called>

3) Přístup ke statickým proměnným třídy.

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

Výstup
Value of static x is 1 Value of local x is 3 Test::y = 2>

4) V případě vícenásobného dědictví: Pokud stejný název proměnné existuje ve dvou třídách předků, můžeme k rozlišení použít operátor rozlišení rozsahu.



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

Výstup
A's x is 10 B's x is 20>

5) Pro jmenný prostor Pokud třída se stejným názvem existuje uvnitř dvou jmenných prostorů, můžeme použít název jmenného prostoru s operátorem rozlišení rozsahu k odkazování na tuto třídu bez jakýchkoli konfliktů.

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

Výstup
favourite Language : python company Name : GFG_2.0>

6) Odkaz na třídu v jiné třídě: Pokud třída existuje uvnitř jiné třídy, můžeme pomocí vnořené třídy odkazovat na vnořenou třídu pomocí operátoru rozlišení rozsahu

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) Odkazujte na člena základní třídy v odvozeném objektu: V případě, že máme stejnou metodu v základní i odvozené třídě, mohli bychom na každou odkazovat operátorem rozlišení rozsahu, jak je uvedeno níže.



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

Výstup
This is Base class This is Derived class>