原創博客:轉載請標明出處:http://www.cnblogs.com/zxouxuewei/
::是C++里的“作用域運算符”。
比如聲明了一個類A,類A里聲明了一個成員函數void f(),但沒有在類的聲明里給出f的定義,那么在類外定義f時,就要寫成void A::f(),表示這個f()函數是類A的成員函數。
:: 一般還有一種用法,就是直接用在全局函數前,表示是全局函數。當類的成員函數跟類外的一個全局函數同名時,在類內定義的時候,打此函數名默認 調用的是本身的成員函數;如果要調用同名的全局函數時,就必須打上::以示區別。比如在VC里,你可以在調用API函數時,在API函數名前加::。
#include<iostream> using namespace std; class _myclass_ { private: int num;public:void display(const int &a); //聲明函數 };
void _myclass_::display(const int &a) //使用作用域運算符定義函數 { cout<<"display value is = "<<a<<endl; }
_myclass_ _value_;
int main()
{
_value_.display(3);
return 0;
}
如果有兩個同名變量,一個是全局的,一個是局部的,那么局部的變量在其作用域擁有較高的優先權,全局變量則被屏蔽。
那如果我希望在局部變量的作用域里使用全局變量怎么辦,這時就要用到::作用域運算符了。比如:
#include<iostream> usingnamespace std; int x=100;
int main()
{
int x = 200;
_value_.display(3);
cout << "x is "<<x<<endl; //輸出main函數中的局部變量(main函數中默認屏蔽所有全局同名變量)
cout << "x is "<<::x<<endl; //輸出全局作用域變量
return 0;
}