C++ では、スコープ解決演算子は次のとおりです。 :: 。以下の目的で使用されます。
1) 同じ名前のローカル変数がある場合にグローバル変数にアクセスするには:
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; }> 出力
Value of global x is 0 Value of local x is 10>
2) クラスの外で関数を定義する。
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; }> 出力
fun() called>
3) クラスの静的変数にアクセスする。
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; }> 出力
Value of static x is 1 Value of local x is 3 Test::y = 2>
4) 多重継承の場合: 2 つの祖先クラスに同じ変数名が存在する場合、スコープ解決演算子を使用して区別できます。
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; }> 出力
A's x is 10 B's x is 20>
5) 名前空間の場合 同じ名前を持つクラスが 2 つの名前空間内に存在する場合、名前空間名をスコープ解決演算子とともに使用して、競合することなくそのクラスを参照できます。
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; }> 出力
favourite Language : python company Name : GFG_2.0>
6) 別のクラス内のクラスを参照します。 クラスが別のクラス内に存在する場合、スコープ解決演算子を使用してネストされたクラスを参照することができます。
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) 派生オブジェクト内の基本クラスのメンバーを参照します。 基底クラスと派生クラスの両方に同じメソッドがある場合、以下のようにスコープ解決演算子によってそれぞれを参照できます。
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; }> 出力
This is Base class This is Derived class>
中央のCSSボタン