Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ทำไม C++ ต้องการ Scope Resolution Operator (::)


บทนำ

ออเปอเรเตอร์ :: (scope resolution) ใช้เพื่อเข้าถึงชื่อที่ถูกซ่อนไว้เนื่องจาก variable scopes ทำให้ยังใช้งานได้ สามารถใช้ได้ทั้งแบบ unary และ binary

Unary Scope Operator

ใช้เมื่อ namespace scope หรือ global scope name ถูกซ่อนโดยการประกาศชื่อเดียวกันใน block หรือ class

ตัวอย่าง: Global vs Local Variable

#include <iostream>
using namespace std;

int my_var = 0;  // global

int main() {
    int my_var = 0;  // local ซ่อน global
    ::my_var = 1;    // set global my_var = 1
    my_var = 2;      // set local my_var = 2
    cout << ::my_var << ", " << my_var;
    return 0;
}

ผลลัพธ์

1, 2

การประกาศ my_var ใน main ซ่อน global my_var คำสั่ง ::my_var = 1 เข้าถึงตัวแปร global

Binary Scope Operator

ใช้เข้าถึง class names หรือ class member names ที่ถูกซ่อน

ตัวอย่าง: Static Member

#include <iostream>
using namespace std;

class X {
public:
    static int count;
};

int X::count = 10;  // define static data member

int main() {
    int X = 0;       // ซ่อน class type X
    cout << X::count << endl;  // ใช้ static member ของ class X
    return 0;
}

ผลลัพธ์

10