(1)表示機構內位域的定義(即該變量占幾個bit空間)
typedef struct _XXX{
unsigned char a:4;
unsigned char c;
} XXX;
(2)構造函數後面的冒號起分割作用,是類給成員變量賦值的方法,初始化列表,更適用於成員變量的常量const型。
struct _XXX{
_XXX() : y(0xc0) { }
};
(3) public:和private:後面的冒號,表示後面定義的所有成員都是公有或私有的,直到下一個"public:”或"private:”出現為止。"private:"為默認處理。
(4)類名冒號後面的是用來定義類的繼承。
class 派生類名 : 繼承方式 基類名
{
派生類的成員
};
繼承方式:public、private和protected,默認處理是public。
(1)表示“域操作符”
例:聲明了一個類A,類A裡聲明了一個成員函數void f(),但沒有在類的聲明裡給出f的定義,那麼在類外定義f時, 就要寫成void A::f(),表示這個f()函數是類A的成員函數。
(2)直接用在全局函數前,表示是全局函數
例:在VC裡,你可以在調用API 函數裡,在API函數名前加 ::
(3)表示引用成員函數及變量,作用域成員運算符
例:System::Math::Sqrt() 相當於System.Math.Sqrt()
——————————————————————————————————————
VC中如下
::是C++裡的“作用域分解運算符”。比如聲明了一個類A,類A裡聲明了一個成員函數voidf(),但沒有在類的聲明裡給出f的定義,那麼在類外定義f時,就要寫成voidA::f(),表示這個f()函數是類A的成員函數。
:: 一般還有一種用法,就是直接用在全局函數前,表示是全局函數。當類的成員函數跟類外的一個全局函數同名時,考試,大提示在類內定義的時候,打此函數名默認調用的是本身的成員函數;如果要調用同名的全局函數時,就必須打上::以示區別。比如在VC裡,你可以在調用API函數時,在API函數名前加::。
*********************************************************************************************
這篇文章將總結C/C++中的冒號的用法。
1、位域定義
這個在前面關於位結構體的文章裡說得夠多的了,不再重復了。
2、類構造函數(Constructor)的初始化列表
先說下什麼叫構造函數吧(是不是啰嗦了?C++的人應該都知道了吧,還是以防萬一一下)。所謂構造函數,就是與類同名的函數,它與普通函數的區別在於,它沒有返回類型。
在構造函數後面緊跟著冒號加初始化列表,各初始化變量之間以逗號(,)隔開。下面舉個例子。
class myClass { public : myClass();// 構造函數,無返回類型,可以有參數列表,這裡省去 ~myClass();// 析構函數 int a; const int b; } myClass::myClass():a(1),b(1)// 初始化列表 { }上面的例子展示了冒號的這個用法,下面對這個用法進行幾點說明:
myClass::myClass() { a = 1;// 沒錯,效果相當於在初始化列表中進行初始化 b = 1;// 出錯,const變量不能進行賦值操作; }2)初始化的順序與成員變量聲名的順序相同。
myClass::myClass():b(1),a(b) { }這樣的執行結果a,b各是多少呢?b=1,a=1?不是,b=1而a是個隨機數。這一點是相當重要的哦,一般在初始化列表中進行初始化時,初始化的順序應與聲明的順序保持一致,防止出現不必要的錯誤。
*********************************************************************************************
1、B::member就表示類B中的成員member
2、
全局作用域符號:當全局變量在局部函數中與其中某個變量重名,那麼就可以用::來區分如:
char zhou; //全局變量 void sleep() { char zhou; //局部變量 char(局部變量) = char(局部變量) *char(局部變量) ; ::char(全局變量) =::char(全局變量) *char(局部變量); }3、
::是C++裡的“作用域分解運算符”。比如聲明了一個類A,類A裡聲明了一個成員函數voidf(),但沒有在類的聲明裡給出f的定義,那麼在類外定義f時,就要寫成voidA::f(),表示這個f()函數是類A的成員函數。例如
class CA { public: int ca_var; int add(int a, int b); int add(int a); }; //那麼在實現這個函數時,必須這樣書寫: int CA::add(int a, int b) { return a + b; } //另外,雙冒號也常常用於在類變量內部作為當前類實例的元素進行表示,比如: int CA::add(int a) { return a + ::ca_var; } //表示當前類實例中的變量ca_var。
首先介紹一下C++中的結構。對於一個結構來說,
struct MyStruct {
int member_a;
};
如果有個變量MyStruct s,那麼使用其中的成員元素時可以用
s.member_a = 1;
如果采用指針方法訪問,比如MyStruct * ps,那麼同樣的訪問必須用箭頭號:
ps->member_a = 1;
::只用在類成員函數和類成員變量中。比如,聲明一個類:
class CA { public: int ca_var; int add(int a, int b); int add(int a); };
另外,雙冒號也常常用於在類變量內部作為當前類實例的元素進行表示,比如:
int CA::add(int a)
{
return a + ::ca_var;
}
表示當前類實例中的變量ca_var。
c++中當定義類對象是指針對象時候,就需要用到->指向類中的成員;當定義一般對象時候時就需要用到"."指向類中的成員.......
class A { public: play(); }
如果定義如下:
A *p則:p->play()使用; 左邊是結構指針。
A p 則:p.paly()使用; 左邊是結構變量。