首先介紹一下C++中的結構。對于一個結構來說,struct MyStruct {int member_a;};
如果有個變量MyStruct s,那么使用其中的成員元素時可以用s.member_a = 1;
如果采用指針方法訪問,比如MyStruct * ps,那么同樣的訪問必須用箭頭號:
ps->member_a = 1;
::只用在類成員函數和類成員變量中。比如,聲明一個類:?
123456 | 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++中當定義類對象是指針對象時候,就需要用到->指向類中的成員;當定義一般對象時候時就需要用到"."指向類中的成員.......例如:?12345 | class A { public : play(); }
|
如果定義如下:
A *p則:p->play()使用; 左邊是結構指針。A p 則:p.paly()使用; 左邊是結構變量。
(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++的人應該都知道了吧,還是以防萬一一下)。所謂構造函數,就是與類同名的函數,它與普通函數的區別在于,它沒有返回類型。在構造函數后面緊跟著冒號加初始化列表,各初始化變量之間以逗號(,)隔開。下面舉個例子。
?123456789101112 | classmyClass{ public: myClass();// 構造函數,無返回類型,可以有參數列表,這里省去 ~myClass();// 析構函數 inta; constintb;} myClass::myClass():a(1),b(1)// 初始化列表{} |
12345 | myClass::myClass(){ a =1;// 沒錯,效果相當于在初始化列表中進行初始化 b =1;// 出錯,const變量不能進行賦值操作;} |
123 | myClass::myClass():b(1),a(b){} |
*********************************************************************************************
1、作用域符號::的前面一般是類名稱,后面一般是該類的成員名稱,C++為例避免不同的類有名稱相同的成員而采用作用域的方式進行區分如:A,B表示兩個類,在A,B中都有成員member。那么A::member就表示類A中的成員memberB::member就表示類B中的成員member
2、
全局作用域符號:當全局變量在局部函數中與其中某個變量重名,那么就可以用::來區分如:
?
12345678910111213 | charzhou;//全局變量 voidsleep() { charzhou;//局部變量 char(局部變量) = char(局部變量) *char(局部變量) ; ::char(全局變量) =::char(全局變量) *char(局部變量); } |
::是C++里的“作用域分解運算符”。比如聲明了一個類A,類A里聲明了一個成員函數voidf(),但沒有在類的聲明里給出f的定義,那么在類外定義f時,就要寫成voidA::f(),表示這個f()函數是類A的成員函數。例如
?
1234567891011121314151617181920 | classCA { public: intca_var; intadd(inta,intb); intadd(inta); }; //那么在實現這個函數時,必須這樣書寫: intCA::add(inta,intb) { returna + b; } //另外,雙冒號也常常用于在類變量內部作為當前類實例的元素進行表示,比如: intCA::add(inta) { returna + ::ca_var; } //表示當前類實例中的變量ca_var。 |
新聞熱點
疑難解答
圖片精選