In C++, l'operatore di risoluzione dell'ambito è :: . Viene utilizzato per i seguenti scopi.
1) Per accedere a una variabile globale quando esiste una variabile locale con lo stesso nome:
rakhi sawantCPP
// 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; }> Produzione
Value of global x is 0 Value of local x is 10>
2) Per definire una funzione al di fuori di 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; }> Produzione
fun() called>
3) Per accedere alle variabili statiche di 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; }> Produzione
Value of static x is 1 Value of local x is 3 Test::y = 2>
4) In caso di eredità multipla: Se lo stesso nome di variabile esiste in due classi antenate, possiamo utilizzare l'operatore di risoluzione dell'ambito per distinguerle.
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; }> Produzione
A's x is 10 B's x is 20>
5) Per lo spazio dei nomi Se esiste una classe con lo stesso nome all'interno di due spazi dei nomi, possiamo utilizzare il nome dello spazio dei nomi con l'operatore di risoluzione dell'ambito per fare riferimento a quella classe senza conflitti
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; }> Produzione
favourite Language : python company Name : GFG_2.0>
6) Fare riferimento a una classe all'interno di un'altra classe: Se una classe esiste all'interno di un'altra classe, possiamo utilizzare la classe nidificata per fare riferimento alla classe nidificata utilizzando l'operatore di risoluzione dell'ambito
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) Fare riferimento a un membro della classe base nell'oggetto derivato: Nel caso in cui si abbia lo stesso metodo sia nella classe base che in quella derivata, è possibile fare riferimento a ciascuna tramite l'operatore di risoluzione dell'ambito come di seguito.
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; }> Produzione
This is Base class This is Derived class>