人妻丰满熟妇AV无码片,岛国AV无码免费无禁网站,丰满岳乱妇一区二区三区,男插女高潮一区二区

RE:c++中冒號(:)和雙冒號(::)運算符的用法和作用

技術(shù)分享 2019-10-01 00:00:00
這篇文章將總結(jié)C/C++中的冒號的用法。

1、位域定義 :
這個在前面關(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ù)后面緊跟著冒號加初始化列表,各初始化變量之間以逗號(,)隔開。下面舉個例子。
class myClass
{
public :
myClass();// 構(gòu)造函數(shù),無返回類型,可以有參數(shù)列表,這里省去
~myClass();// 析構(gòu)函數(shù)
int a;
const int b;
}

myClass::myClass():a(1),b(1)// 初始化列表
{
}
上面的例子展示了冒號的這個用法,下面對這個用法進行幾點說明:
1)初始化列表的作用相當于在構(gòu)造函數(shù)內(nèi)進行相應(yīng)成員變量的賦值,但兩者是有差別的。
在初始化列表中是對變量進行初始化,而在構(gòu)造函數(shù)內(nèi)是進行賦值操作。兩都的差別在對于像const類型數(shù)據(jù)的操作上表現(xiàn)得尤為明顯。我們知道,const類型的變量必須在定義時進行初始化,而不能對const型的變量進行賦值,因此const類型的成員變量只能(而且必須)在初始化列表中進行初始化,即下面的代碼將會出錯:
myClass::myClass()
{
a = 1;// 沒錯,效果相當于在初始化列表中進行初始化
b = 1;// 出錯,const變量不能進行賦值操作;
}
2)初始化的順序與成員變量聲名的順序相同。
先看一下下面的程序:
myClass::myClass():b(1),a(b)
{
}
這樣的執(zhí)行結(jié)果a,b各是多少呢?b=1,a=1?不是,b=1而a是個隨機數(shù)。這一點是相當重要的哦,一般在初始化列表中進行初始化時,初始化的順序應(yīng)與聲明的順序保持一致,防止出現(xiàn)不必要的錯誤。
3)對于繼承的類來說,在初始化列表中也可以進行基類的初始化,初始化的順序是先基類初始化,然后再根據(jù)該類自己的變量的聲明順序進行初始化。

3、聲明基類。
假設(shè)我們重新定義一個類,繼承自myClass類。定義方式如下:
class derivedClass : public myClass
{
// 略去
}
這里的冒號起到的就是聲名基類的作用,在基類類名前面可以加public/private/protected等標簽,用于標識繼承的類型,也可以省略,省略的話,用class定義的類默認為private,用struct定義的類默認為public,至于具體各個標簽有什么區(qū)別這里就不說了。
與初始化列表一樣的,這里也可以聲名多個基類,各基類之間用逗號(,)隔開。

4、條件語句(? :
與?構(gòu)成條件語句,作用相當于if else,如下;
int a,b,c;
a=3;
b=2;
c=a>b?a:b;// 如果a>b成立,則反a賦給c,否則把b賦給c
條件語句的結(jié)構(gòu)為:
條件表達式?表達式1:表達式2
當條件表達式為true時,表達式的值為表達式1的值,否則為表達式2的值。
幾點說明:
1)?:可以嵌套,但不推薦使用(難懂),下面的表達式你能看懂啥意思不?
int max = i>j ? i>k ? i : k : j>k ? j : k;
腦袋大了吧,呵呵。
2)?:具有很低的優(yōu)先級,這個要注意哦,下面的程序執(zhí)行結(jié)果是啥呢?
int i = 3;
int j = 2;
cout << i>j?i:j;// 出錯,<<比>具有更高的優(yōu)先級,執(zhí)行順序為 ((cout<j)?i:j,相當于是比較cout<cout << (i>j)?i:j;//輸出1或0,相當于(cout<<(i>j))作為判決條件,來決定表達式的值為i或j,而cout<<(i>j),i>j則輸出1否則0,然后再將(cout<<(i>j))作為?:的條件,如果cout正確執(zhí)行則為1(true),否則為0(false),以此決定表達式值為i或j
cout <<(i>j?i:j);//i>j則輸出i,否則輸出j,表達式值為true如果cout正確執(zhí)行,否則為false
更多的關(guān)于優(yōu)先級的問題就不說了。

5、語句標簽
通常跟goto配合使用,如:
step1: a = f1();
....
goto step1;
這種作法也不是很推薦,原因在于它破壞了語句的順序執(zhí)行,這樣的代價大家應(yīng)該清楚吧。不過存在即為合理嘛,既然它還存在,肯定還是有它的用處有它的好處的,比如說,多層嵌套的退出(會比break continue直觀一點吧),也可以避免重復(fù)代碼之類之類的

6、switch語句中case后。
這個不說了,要是不會的話,我也沒話可說了。

7、匯編指令模板
這個我也不懂,不班門弄斧了,可以參考一下:http://developer.e800.com.cn/art ... 144846933898_1.html
改天學習一下。
----------------------------
-------------------------------------------------------
----------------------------

雙引號::

*********************************************************************************************
*********************************************************************************************
*********************************************************************************************
1、 作用域符號 :: 的前面一般是類名稱,后面一般是該類的成員名稱,C++為例避免不同的類有名稱相同的成員而采用作用域的方式進行區(qū)分
如:A,B表示兩個類,在A,B中都有成員member。那么
A::member就表示類A中的成員member
B::member就表示類B中的成員member



2、 全局作用域符號 :: 當全局變量在局部函數(shù)中與其中某個變量重名,那么就可以用 :: 來區(qū)分如:

char zhou; //全局變量

void sleep()



char zhou; //局部變量

char(局部變量) = char(局部變量) *char(局部變量) ;

::char(全局變量) =::char(全局變量) *char(局部變量);




3、 ::是C++里的“作用域分解運算符”。比如聲明了一個類A,類A里聲明了一個成員函數(shù)voidf(),但沒有在類的聲明里給出f的定義,那么在類外定義f時,就要寫成voidA::f(),表示這個f()函數(shù)是類A的成員函數(shù)。例如

class CA {
public:
int ca_var;
int add(int a, int b);
int add(int a);
};

//那么在實現(xiàn)這個函數(shù)時,必須這樣書寫:
int CA::add(int a, int b)
{
return a + b;
}

//另外,雙冒號也常常用于在類變量內(nèi)部作為當前類實例的元素進行表示,比如:
int CA::add(int a)
{
return a + ::ca_var;
}

//表示當前類實例中的變量ca_var。
咨詢小瓶科技
咨詢我們
頂部