原文http://blog.csdn.net/zimingjushi/article/details/6549390/
1.冒號(hào)(:)用法(1)表示機(jī)構(gòu)內(nèi)位域的定義(即該變量占幾個(gè)bit空間)typedef struct _XXX{unsigned char a:4;unsigned char c;} ; XXX(2)構(gòu)造函數(shù)后面的冒號(hào)起分割作用,是類給成員變量賦值的方法,初始化列表,更適用于成員變量的常量const型。struct _XXX{_XXX() : y(0xc0) {}};(3) public:和PRivate:后面的冒號(hào),表示后面定義的所有成員都是公有或私有的,直到下一個(gè)"public:”或"private:”出現(xiàn)為止。"private:"為默認(rèn)處理。(4)類名冒號(hào)后面的是用來定義類的繼承。class 派生類名 : 繼承方式 基類名{派生類的成員};繼承方式:public、private和protected,默認(rèn)處理是public。2.雙冒號(hào)(::)用法(1)表示“域操作符”例:聲明了一個(gè)類A,類A里聲明了一個(gè)成員函數(shù)void f(),但沒有在類的聲明里給出f的定義,那么在類外定義f時(shí), 就要寫成void A::f(),表示這個(gè)f()函數(shù)是類A的成員函數(shù)。(2)直接用在全局函數(shù)前,表示是全局函數(shù) 例:在VC里,你可以在調(diào)用API 函數(shù)里,在API函數(shù)名前加::(3)表示引用成員函數(shù)及變量,作用域成員運(yùn)算符例:System::Math::Sqrt() 相當(dāng)于System.Math.Sqrt()——————————————————————————————————————VC中如下::是C++里的“作用域分解運(yùn)算符”。比如聲明了一個(gè)類A,類A里聲明了一個(gè)成員函數(shù)voidf(),但沒有在類的聲明里給出f的定義,那么在類外定義f時(shí),就要寫成voidA::f(),表示這個(gè)f()函數(shù)是類A的成員函數(shù)。 :: 一般還有一種用法,就是直接用在全局函數(shù)前,表示是全局函數(shù)。當(dāng)類的成員函數(shù)跟類外的一個(gè)全局函數(shù)同名時(shí),考試,大提示在類內(nèi)定義的時(shí)候,打此函數(shù)名默認(rèn)調(diào)用的是本身的成員函數(shù);如果要調(diào)用同名的全局函數(shù)時(shí),就必須打上::以示區(qū)別。比如在VC里,你可以在調(diào)用API函數(shù)時(shí),在API函數(shù)名前加::。(編輯:)
*********************************************************************************************
*********************************************************************************************
*********************************************************************************************
這篇文章將總結(jié)C/C++中的冒號(hào)的用法。1、位域定義這個(gè)在前面關(guān)于位結(jié)構(gòu)體的文章里說得夠多的了,不再重復(fù)了。2、類構(gòu)造函數(shù)(Constructor)的初始化列表先說下什么叫構(gòu)造函數(shù)吧(是不是啰嗦了?C++的人應(yīng)該都知道了吧,還是以防萬一一下)。所謂構(gòu)造函數(shù),就是與類同名的函數(shù),它與普通函數(shù)的區(qū)別在于,它沒有返回類型。在構(gòu)造函數(shù)后面緊跟著冒號(hào)加初始化列表,各初始化變量之間以逗號(hào)(,)隔開。下面舉個(gè)例子。class myClass{public :myClass();// 構(gòu)造函數(shù),無返回類型,可以有參數(shù)列表,這里省去~myClass();// 析構(gòu)函數(shù)int a;const int b;}myClass::myClass():a(1),b(1)// 初始化列表{}上面的例子展示了冒號(hào)的這個(gè)用法,下面對(duì)這個(gè)用法進(jìn)行幾點(diǎn)說明:1)初始化列表的作用相當(dāng)于在構(gòu)造函數(shù)內(nèi)進(jìn)行相應(yīng)成員變量的賦值,但兩者是有差別的。在初始化列表中是對(duì)變量進(jìn)行初始化,而在構(gòu)造函數(shù)內(nèi)是進(jìn)行賦值操作。兩都的差別在對(duì)于像const類型數(shù)據(jù)的操作上表現(xiàn)得尤為明顯。我們知道,const類型的變量必須在定義時(shí)進(jìn)行初始化,而不能對(duì)const型的變量進(jìn)行賦值,因此const類型的成員變量只能(而且必須)在初始化列表中進(jìn)行初始化,即下面的代碼將會(huì)出錯(cuò):myClass::myClass(){a = 1;// 沒錯(cuò),效果相當(dāng)于在初始化列表中進(jìn)行初始化b = 1;// 出錯(cuò),const變量不能進(jìn)行賦值操作;}2)初始化的順序與成員變量聲名的順序相同。先看一下下面的程序:myClass::myClass():b(1),a(b){}這樣的執(zhí)行結(jié)果a,b各是多少呢?b=1,a=1?不是,b=1而a是個(gè)隨機(jī)數(shù)。這一點(diǎn)是相當(dāng)重要的哦,一般在初始化列表中進(jìn)行初始化時(shí),初始化的順序應(yīng)與聲明的順序保持一致,防止出現(xiàn)不必要的錯(cuò)誤。3)對(duì)于繼承的類來說,在初始化列表中也可以進(jìn)行基類的初始化,初始化的順序是先基類初始化,然后再根據(jù)該類自己的變量的聲明順序進(jìn)行初始化。3、聲明基類。假設(shè)我們重新定義一個(gè)類,繼承自myClass類。定義方式如下:class derivedClass : public myClass{// 略去}這里的冒號(hào)起到的就是聲名基類的作用,在基類類名前面可以加public/private/protected等標(biāo)簽,用于標(biāo)識(shí)繼承的類型,也可以省略,省略的話,用class定義的類默認(rèn)為private,用struct定義的類默認(rèn)為public,至于具體各個(gè)標(biāo)簽有什么區(qū)別這里就不說了。與初始化列表一樣的,這里也可以聲名多個(gè)基類,各基類之間用逗號(hào)(,)隔開。4、條件語句(? :)與?構(gòu)成條件語句,作用相當(dāng)于if else,如下;int a,b,c;a=3;b=2;c=a>b?a:b;// 如果a>b成立,則反a賦給c,否則把b賦給c條件語句的結(jié)構(gòu)為:條件表達(dá)式?表達(dá)式1:表達(dá)式2當(dāng)條件表達(dá)式為true時(shí),表達(dá)式的值為表達(dá)式1的值,否則為表達(dá)式2的值。幾點(diǎn)說明:1)?:可以嵌套,但不推薦使用(難懂),下面的表達(dá)式你能看懂啥意思不?int max = i>j ? i>k ? i : k : j>k ? j : k;腦袋大了吧,呵呵。2)?:具有很低的優(yōu)先級(jí),這個(gè)要注意哦,下面的程序執(zhí)行結(jié)果是啥呢?int i = 3;int j = 2;cout << i>j?i:j;// 出錯(cuò),<<比>具有更高的優(yōu)先級(jí),執(zhí)行順序?yàn)?((cout<<i)>j)?i:j,相當(dāng)于是比較cout<<i與j的大小,然后根據(jù)比較結(jié)果決定表達(dá)式值為i或j,這顯然要出錯(cuò)的,cout<<i的值是cout,不能跟整型數(shù)j進(jìn)行比較。cout << (i>j)?i:j;//輸出1或0,相當(dāng)于(cout<<(i>j))作為判決條件,來決定表達(dá)式的值為i或j,而cout<<(i>j),i>j則輸出1否則0,然后再將(cout<<(i>j))作為?:的條件,如果cout正確執(zhí)行則為1(true),否則為0(false),以此決定表達(dá)式值為i或jcout <<(i>j?i:j);//i>j則輸出i,否則輸出j,表達(dá)式值為true如果cout正確執(zhí)行,否則為false更多的關(guān)于優(yōu)先級(jí)的問題就不說了。5、語句標(biāo)簽通常跟goto配合使用,如:step1: a = f1();....goto step1;這種作法也不是很推薦,原因在于它破壞了語句的順序執(zhí)行,這樣的代價(jià)大家應(yīng)該清楚吧。不過存在即為合理嘛,既然它還存在,肯定還是有它的用處有它的好處的,比如說,多層嵌套的退出(會(huì)比break continue直觀一點(diǎn)吧),也可以避免重復(fù)代碼之類之類的6、switch語句中case后。這個(gè)不說了,要是不會(huì)的話,我也沒話可說了。7、匯編指令模板這個(gè)我也不懂,不班門弄斧了,可以參考一下:http://developer.e800.com.cn/articles/2006/43/1144846933898_1.html改天學(xué)習(xí)一下。
*********************************************************************************************
*********************************************************************************************
*********************************************************************************************
1、 作用域符號(hào)::的前面一般是類名稱,后面一般是該類的成員名稱,C++為例避免不同的類有名稱相同的成員而采用作用域的方式進(jìn)行區(qū)分如:A,B表示兩個(gè)類,在A,B中都有成員member。那么A::member就表示類A中的成員memberB::member就表示類B中的成員member 2、 全局作用域符號(hào):當(dāng)全局變量在局部函數(shù)中與其中某個(gè)變量重名,那么就可以用::來區(qū)分如: char zhou; //全局變量 void sleep() { char zhou; //局部變量 char(局部變量) = char(局部變量) *char(局部變量) ; ::char(全局變量) =::char(全局變量) *char(局部變量); } 3、 ::是C++里的“作用域分解運(yùn)算符”。比如聲明了一個(gè)類A,類A里聲明了一個(gè)成員函數(shù)voidf(),但沒有在類的聲明里給出f的定義,那么在類外定義f時(shí),就要寫成voidA::f(),表示這個(gè)f()函數(shù)是類A的成員函數(shù)。例如[cpp] view plain copy01 class CA { 02 public: 03 int ca_var; 04 int add(int a, int b); 05 int add(int a); 06 }; 07 08 //那么在實(shí)現(xiàn)這個(gè)函數(shù)時(shí),必須這樣書寫: 09 int CA::add(int a, int b) 10 { 11 return a + b; 12 } 13 14 //另外,雙冒號(hào)也常常用于在類變量?jī)?nèi)部作為當(dāng)前類實(shí)例的元素進(jìn)行表示,比如: 15 int CA::add(int a) 16 { 17 return a + ::ca_var; 18 } 19 20 //表示當(dāng)前類實(shí)例中的變量ca_var。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注