C++(c plus plus)是一種計算機高(gao)級(ji)程序設計語言,由C語言擴展升級(ji)而產生(sheng),最早(zao)于1979年由本賈尼·斯特(te)勞斯特(te)盧普在(zai)AT&T貝爾(er)工(gong)作室研發。
C++既可以進(jin)(jin)行(xing)C語言(yan)(yan)的(de)(de)過程(cheng)化程(cheng)序(xu)(xu)設(she)(she)(she)(she)計(ji),又(you)可以進(jin)(jin)行(xing)以抽(chou)象(xiang)數據(ju)類(lei)(lei)型(xing)為(wei)特點的(de)(de)基于(yu)對象(xiang)的(de)(de)程(cheng)序(xu)(xu)設(she)(she)(she)(she)計(ji),還可以進(jin)(jin)行(xing)以繼承和(he)多(duo)態為(wei)特點的(de)(de)面向(xiang)對象(xiang)的(de)(de)程(cheng)序(xu)(xu)設(she)(she)(she)(she)計(ji)。C++擅長面向(xiang)對象(xiang)程(cheng)序(xu)(xu)設(she)(she)(she)(she)計(ji)的(de)(de)同時(shi),還可以進(jin)(jin)行(xing)基于(yu)過程(cheng)的(de)(de)程(cheng)序(xu)(xu)設(she)(she)(she)(she)計(ji)。C++幾乎(hu)可以創建任何類(lei)(lei)型(xing)的(de)(de)程(cheng)序(xu)(xu):游(you)戲、設(she)(she)(she)(she)備(bei)驅動程(cheng)序(xu)(xu)、HPC、云、桌面、嵌入式和(he)移動應(ying)用(yong)等。甚至用(yong)于(yu)其(qi)他編程(cheng)語言(yan)(yan)的(de)(de)庫和(he)編譯器也使用(yong)C++編寫。
C++擁有(you)計算(suan)機運行(xing)的實用性特征,同時還致力(li)于提高(gao)大規模程(cheng)(cheng)序的編程(cheng)(cheng)質量(liang)與(yu)程(cheng)(cheng)序設(she)計語言的問(wen)題描述能力(li)。
1970年,AT&T貝(bei)爾(er)實(shi)驗室(shi)的(de)工作(zuo)人員D.Ritchie和K.Thompson共同(tong)研發了C語言。研制C語言的(de)初衷是用它編寫UNIX系統程(cheng)序,因此,實(shi)際上C語言是UNIX的(de)“副產品”。
1971年,瑞士聯邦技(ji)術學院N.Wirth教授發明了第一個結構化的編(bian)程(cheng)語言Pascal。
20世紀70年代中期,本賈尼·斯特(te)(te)(te)勞(lao)斯特(te)(te)(te)盧普(pu)在劍橋大學(xue)計算(suan)(suan)機中心(xin)工作(zuo)。斯特(te)(te)(te)勞(lao)斯特(te)(te)(te)盧普(pu)希望開(kai)發一個既要(yao)編程(cheng)簡單、正確可(ke)靠,又要(yao)運行高效、可(ke)移(yi)植的計算(suan)(suan)機程(cheng)序設(she)計語言(yan)(yan)。而以C語言(yan)(yan)為背景(jing),以Simula思(si)想為基(ji)礎的語言(yan)(yan),正好符合斯特(te)(te)(te)勞(lao)斯特(te)(te)(te)盧普(pu)的初衷和設(she)想。
1979年,本賈尼(ni)·斯(si)特(te)勞斯(si)特(te)盧(lu)普到了AT&T貝爾實驗室,開始從(cong)事將C改良(liang)為帶類的C(C with classes)的工作。、1983年,該語言被正式命名為C++。
1985年(nian)(nian)、1990年(nian)(nian)和1994年(nian)(nian),C++先后進行3次主要修訂。
C++的標(biao)準(zhun)化(hua)工作于1989年開(kai)始,并成立(li)了一個(ge)ANSI和ISO(International Standards Organization)國(guo)際標(biao)準(zhun)化(hua)組(zu)織的聯(lian)合(he)標(biao)準(zhun)化(hua)委員會。
1994年1月25曰,聯合標準化委員(yuan)會提出了(le)第(di)一個標準化草案(an)。在該草案(an)中(zhong),委員(yuan)會在保持斯特勞(lao)斯特盧普最(zui)初定義的所(suo)有特征(zheng)的同時,還增(zeng)加了(le)部分(fen)新(xin)特征(zheng)。
在完成C++標(biao)(biao)準(zhun)(zhun)化的(de)第(di)一(yi)個草案(an)后(hou)不久(jiu),亞歷(li)山大·斯特潘諾(nuo)夫(fu)(Alexander Stepanov)創建了(le)(le)標(biao)(biao)準(zhun)(zhun)模板庫(Standard Template Library,STL)。在通過了(le)(le)標(biao)(biao)準(zhun)(zhun)化第(di)一(yi)個草案(an)之(zhi)后(hou),聯合標(biao)(biao)準(zhun)(zhun)化委員會投票并通過了(le)(le)將(jiang)STL包含到C++標(biao)(biao)準(zhun)(zhun)中(zhong)的(de)提議。STL對(dui)C++的(de)擴展超出了(le)(le)C++的(de)最(zui)初定(ding)義范(fan)圍。雖(sui)然在標(biao)(biao)準(zhun)(zhun)中(zhong)增加STL是個很重(zhong)要的(de)決(jue)定(ding),但也因此延緩了(le)(le)C++標(biao)(biao)準(zhun)(zhun)化的(de)進程。
1997年11月14日,聯合(he)標準(zhun)化委員會通過了該標準(zhun)的(de)最終草案,
1998年,C++的(de)ANSI/IS0標準(zhun)被投入使用。
截至2014年3月(yue),C++共有(you)12個主流集(ji)成(cheng)開發環境。
Visual Studio(Visual C++) Dev C++ C++ Builder kDevelop
Anjuta Code::Blocks Visual Mingw Ideone
Eclipse CDT Compilr Code Lite Netbeans C++
截(jie)至2014年3月,C++共有5款主(zhu)流編譯器。
Ultimate++ Digital Mars C-Free MinGW Tiny C Compiler
C++語言的程序開(kai)發環境,為了(le)方便測(ce)試(shi),將調試(shi)環境做成了(le)解釋型(xing)。即開(kai)發過程中,以解釋型(xing)的逐條語句執行(xing)(xing)方式(shi)來進(jin)行(xing)(xing)調試(shi),以編譯型(xing)的脫離開(kai)發環境而啟動(dong)運(yun)行(xing)(xing)的方式(shi)來生(sheng)成程序最終的執行(xing)(xing)代碼。
開發C++應用程(cheng)(cheng)(cheng)(cheng)序,需要(yao)經過(guo)編寫(xie)(xie)源(yuan)(yuan)程(cheng)(cheng)(cheng)(cheng)序、編譯、連(lian)接(jie)程(cheng)(cheng)(cheng)(cheng)序生(sheng)成(cheng)可(ke)執行(xing)程(cheng)(cheng)(cheng)(cheng)序、運行(xing)程(cheng)(cheng)(cheng)(cheng)序四個(ge)步驟。生(sheng)成(cheng)程(cheng)(cheng)(cheng)(cheng)序是指(zhi)將源(yuan)(yuan)碼(C++語句)轉換成(cheng)一個(ge)可(ke)以運行(xing)的應用程(cheng)(cheng)(cheng)(cheng)序的過(guo)程(cheng)(cheng)(cheng)(cheng)。如果程(cheng)(cheng)(cheng)(cheng)序編寫(xie)(xie)正確(que),那么通常只需按一個(ge)功能(neng)鍵(jian),即可(ke)完成(cheng)該過(guo)程(cheng)(cheng)(cheng)(cheng)。
第一(yi)(yi)步(bu)對(dui)程序(xu)進行(xing)編譯,這需(xu)要(yao)用(yong)到編譯器(qi)(qi)(qi)(compiler)。編譯器(qi)(qi)(qi)將(jiang)C++語句轉換成機器(qi)(qi)(qi)碼(ma)(也稱為(wei)目(mu)標碼(ma));如果該步(bu)驟成功執行(xing),下一(yi)(yi)步(bu)就是對(dui)程序(xu)進行(xing)鏈(lian)接(jie)(jie),這需(xu)要(yao)用(yong)到鏈(lian)接(jie)(jie)器(qi)(qi)(qi)(linker)。鏈(lian)接(jie)(jie)器(qi)(qi)(qi)將(jiang)編譯獲(huo)得機器(qi)(qi)(qi)碼(ma)與(yu)C++庫中(zhong)的(de)(de)代碼(ma)進行(xing)合并(bing)。C++庫包(bao)含了執行(xing)某些常見任務的(de)(de)函(han)數(shu)(shu)(“函(han)數(shu)(shu)”是子程序(xu)的(de)(de)另一(yi)(yi)種稱呼)。例如,一(yi)(yi)個C++庫中(zhong)包(bao)含標準的(de)(de)平方根函(han)數(shu)(shu)sqrt,所以不必親自計算平方根。C++庫中(zhong)還包(bao)含一(yi)(yi)些子程序(xu),它們把數(shu)(shu)據(ju)發送到顯示器(qi)(qi)(qi),并(bing)知(zhi)道(dao)如何(he)讀寫硬(ying)盤上的(de)(de)數(shu)(shu)據(ju)文(wen)件。
C++語言數據(ju)類(lei)型(xing)(xing)(xing)可(ke)以(yi)(yi)分為兩大類(lei):基本(ben)類(lei)型(xing)(xing)(xing)和(he)引(yin)(yin)用類(lei)型(xing)(xing)(xing)。基本(ben)類(lei)型(xing)(xing)(xing)是(shi)指(zhi)不能再分解的數據(ju)類(lei)型(xing)(xing)(xing),其數據(ju)在(zai)函數的調(diao)用中(zhong)是(shi)以(yi)(yi)傳(chuan)值方式工作的;引(yin)(yin)用類(lei)型(xing)(xing)(xing)有時也(ye)稱復合類(lei)型(xing)(xing)(xing),它是(shi)可(ke)以(yi)(yi)分解為基本(ben)類(lei)型(xing)(xing)(xing)的數據(ju)類(lei)型(xing)(xing)(xing),其數據(ju)在(zai)函數調(diao)用中(zhong)是(shi)以(yi)(yi)傳(chuan)址(zhi)方式來工作的。
1、整數常量
整數(shu)常量是不(bu)帶小(xiao)數(shu)的數(shu)值,用來表示正負數(shu)。例2—2中Ox55、0x55ff、1000000都是c++語(yu)言的整數(shu)常量。
c++語言的整數(shu)常量有(you)三種(zhong)形式:十進(jin)(jin)制、八進(jin)(jin)制、十六進(jin)(jin)制。
(1)十進(jin)制(zhi)整數是由不(bu)以0開(kai)頭(tou)的(de)0~9的(de)數字組成的(de)數據。
(2)八(ba)進制整(zheng)數(shu)是由以0開頭的0~7的數(shu)字組(zu)成(cheng)的數(shu)據(ju)。
(3)十六進制整數(shu)是由以0x或0x開頭的0~9的數(shu)字及(ji)A~F的字母(mu)(mu)(大小(xiao)寫字母(mu)(mu)均可(ke))組成的數(shu)據(ju)。
例如:
0,63,83是十進(jin)制(zhi)數。
00,077,0123是八進制數(shu)。
0x0,Ox0,0x53,0x53,0x3f,0x3f是十六(liu)進制數。
整數常量的取值范圍是有(you)限(xian)的,它的大(da)小(xiao)取決于(yu)此(ci)類(lei)整型數的類(lei)型,與所使用的進制(zhi)形(xing)式無關。
2、整型變量類(lei)型
整型變量類型有byte,short,int,long四種說明符(fu),它們都(dou)是有符(fu)號整型變量類型。
(1)byte類型
byte類型(xing)說明一個帶符號的(de)(de)8位整(zheng)型(xing)變量。由于(yu)不同(tong)的(de)(de)機(ji)器對多(duo)字(zi)(zi)(zi)節(jie)數據的(de)(de)存儲(chu)(chu)(chu)(chu)方式(shi)(shi)不同(tong),可(ke)能(neng)是(shi)從低字(zi)(zi)(zi)節(jie)向高(gao)字(zi)(zi)(zi)節(jie)存儲(chu)(chu)(chu)(chu),也可(ke)能(neng)是(shi)從高(gao)字(zi)(zi)(zi)節(jie)向低字(zi)(zi)(zi)節(jie)存儲(chu)(chu)(chu)(chu)。這樣(yang),在分析網(wang)絡協(xie)議或(huo)文件格式(shi)(shi)時,為了解決不同(tong)機(ji)器上的(de)(de)字(zi)(zi)(zi)節(jie)存儲(chu)(chu)(chu)(chu)順序問題(ti),用byte類型(xing)來(lai)表示(shi)數據是(shi)合適的(de)(de)。
(2)short類(lei)型
short類型(xing)說明一個帶(dai)符(fu)號的16位整型(xing)變(bian)量(liang)。short類型(xing)限制(zhi)了數據的存儲應為先高字節,后低(di)字節。
(3)int類型
int類(lei)(lei)型說明(ming)一(yi)個帶符號的32位整型變量。int類(lei)(lei)型是一(yi)種最(zui)豐(feng)富、最(zui)有效的類(lei)(lei)型。它(ta)最(zui)常用(yong)于計(ji)數、數組訪問和(he)整數運算(suan)。
(4)long類型(xing)
long類(lei)型(xing)(xing)說明一個帶(dai)符號的64位整型(xing)(xing)變量(liang)。對于大(da)型(xing)(xing)計算,常(chang)常(chang)會遇(yu)到很大(da)的整數(shu),并超出int所表示的范圍(wei),這(zhe)時要(yao)使用long類(lei)型(xing)(xing)。
1、浮點數常量
浮(fu)點(dian)數是(shi)帶有小數的(de)(de)十(shi)進制數,可用一(yi)般表(biao)示法或科學記數法表(biao)示。0.23f、0.7e-3都是(shi)c++語言(yan)的(de)(de)浮(fu)點(dian)數常量。
(1)一般表(biao)示法:十進制整數(shu)+小數(shu)點+十進制小數(shu)。
(2)科學記(ji)數法:十(shi)進(jin)制整數+小(xiao)數點+十(shi)進(jin)制小(xiao)數+E(或e)+正負號+指數。
例如:3.14159,0.567,9777.12是(shi)一(yi)般表示法(fa)形式,1.234e5,4.90867e-2是(shi)科(ke)學記(ji)數法(fa)形式。
c++語言的浮(fu)點數常(chang)量在機器中有(you)單(dan)精(jing)(jing)(jing)度(du)(du)和(he)雙精(jing)(jing)(jing)度(du)(du)之分(fen)。單(dan)精(jing)(jing)(jing)度(du)(du)以(yi)(yi)32位形式(shi)存放,用f/F做(zuo)后綴(zhui)標記(可以(yi)(yi)省略(lve));雙精(jing)(jing)(jing)度(du)(du)則(ze)以(yi)(yi)64位形式(shi)存放。當一個浮(fu)點數常(chang)量沒有(you)特別(bie)指定(ding)精(jing)(jing)(jing)度(du)(du)時,則(ze)它為雙精(jing)(jing)(jing)度(du)(du)浮(fu)點數常(chang)量。
2、浮點變量(liang)類(lei)型
浮點變量(liang)(liang)也稱實數(shu)變量(liang)(liang),用(yong)于需要精確到小數(shu)的(de)函(han)數(shu)運算中(zhong),有float和double兩種類型(xing)說明符。
(1)float類型
float類型(xing)是一個位數(shu)為32位的(de)單精(jing)度(du)浮點(dian)(dian)數(shu)。它具(ju)有運(yun)行速(su)度(du)較快,占用空(kong)間(jian)較少的(de)特點(dian)(dian)。
(2)double類型
double類(lei)(lei)型(xing)是(shi)一個位(wei)數為(wei)64的(de)雙(shuang)(shuang)精(jing)(jing)度(du)浮點數。雙(shuang)(shuang)精(jing)(jing)度(du)數在某(mou)些具有(you)優化和高速運算能力的(de)現(xian)代(dai)處(chu)理機上運算比單精(jing)(jing)度(du)數快(kuai)。雙(shuang)(shuang)精(jing)(jing)度(du)類(lei)(lei)型(xing)double比單精(jing)(jing)度(du)類(lei)(lei)型(xing)float具有(you)更高的(de)精(jing)(jing)度(du)和更大表示范圍,常(chang)常(chang)使(shi)用。
1、字符型常量
字符(fu)型常(chang)量是指由單引號括起來的單個字符(fu)。
例如(ru):’a’,’A’,’z’,‘$’,’?’。
注意(yi):’a’和’A’是兩個不同的字(zi)符常量。
除了以上(shang)形式(shi)的字(zi)符(fu)(fu)(fu)(fu)常(chang)(chang)量(liang)(liang)外,c++語言還允許使用(yong)一種(zhong)以“”開(kai)頭的特殊形式(shi)的字(zi)符(fu)(fu)(fu)(fu)常(chang)(chang)量(liang)(liang)。這(zhe)種(zhong)字(zi)符(fu)(fu)(fu)(fu)常(chang)(chang)量(liang)(liang)稱為轉義(yi)字(zi)符(fu)(fu)(fu)(fu),用(yong)來表示一些不可顯示的或有特殊意義(yi)的字(zi)符(fu)(fu)(fu)(fu)。
2、字符型變量
字符(fu)型(xing)變量的類型(xing)說明符(fu)為(wei)char,它(ta)在機器中占8位,其范圍為(wei)0~255。
注意:字(zi)(zi)符型變量只能(neng)存(cun)放(fang)一個(ge)字(zi)(zi)符,不能(neng)存(cun)放(fang)多個(ge)字(zi)(zi)符,例如(ru):
1
char a='am';
這樣(yang)定(ding)義賦(fu)值是錯誤的。
布爾常量只有兩個值(zhi):“true”和(he)“false”,表示“真”和(he)“假”,均為關鍵(jian)詞,在機(ji)器中位長為8位。
布(bu)爾型(xing)變量的類型(xing)說明符為booI,用來表示邏輯值。
C++語言中定義了豐富的運算符,如算術運算符、關系運算符、邏輯運算符等等,有些運算符需要兩個操作數,使用形式為:<操作數1>運算符<操作數2>,這(zhe)樣的運(yun)(yun)算符稱為(wei)二元運(yun)(yun)算符(或(huo)二目(mu)運(yun)(yun)算符)。另一些(xie)運(yun)(yun)算符只(zhi)需要一個操作(zuo)數,稱為(wei)一元運(yun)(yun)算符(或(huo)單目(mu)運(yun)(yun)算符)。
運(yun)算(suan)(suan)(suan)符(fu)具(ju)有(you)優(you)(you)先(xian)級(ji)與結(jie)合(he)(he)性。當一個(ge)表達(da)式包含多個(ge)運(yun)算(suan)(suan)(suan)符(fu)時,先(xian)進行(xing)優(you)(you)先(xian)級(ji)高(gao)的(de)(de)(de)運(yun)算(suan)(suan)(suan),再進行(xing)優(you)(you)先(xian)級(ji)低的(de)(de)(de)運(yun)算(suan)(suan)(suan)。如(ru)(ru)果表達(da)式中(zhong)出現了多個(ge)相同(tong)優(you)(you)先(xian)級(ji)的(de)(de)(de)運(yun)算(suan)(suan)(suan),運(yun)算(suan)(suan)(suan)順序(xu)就要看(kan)運(yun)算(suan)(suan)(suan)符(fu)的(de)(de)(de)結(jie)合(he)(he)性了。所謂結(jie)合(he)(he)性,是(shi)(shi)指當一個(ge)操作數左右(you)兩邊的(de)(de)(de)運(yun)算(suan)(suan)(suan)符(fu)優(you)(you)先(xian)級(ji)相同(tong)時,按什(shen)么樣(yang)的(de)(de)(de)順序(xu)進行(xing)運(yun)算(suan)(suan)(suan),是(shi)(shi)自左向(xiang)右(you),還是(shi)(shi)自右(you)向(xiang)左。例如(ru)(ru),我們熟(shu)悉的(de)(de)(de)算(suan)(suan)(suan)術表達(da)式6+5-2中(zhong),“+”、“-”是(shi)(shi)同(tong)級(ji)運(yun)算(suan)(suan)(suan)符(fu),那么是(shi)(shi)先(xian)算(suan)(suan)(suan)5-2,還是(shi)(shi)先(xian)算(suan)(suan)(suan)6+5?這(zhe)就取決于(yu)算(suan)(suan)(suan)術運(yun)算(suan)(suan)(suan)符(fu)的(de)(de)(de)結(jie)合(he)(he)性。由于(yu)算(suan)(suan)(suan)術運(yun)算(suan)(suan)(suan)符(fu)的(de)(de)(de)結(jie)合(he)(he)性為自左向(xiang)右(you),所以(yi)應先(xian)算(suan)(suan)(suan)6+5,然后(hou)再算(suan)(suan)(suan)11-2。
算(suan)(suan)術(shu)運算(suan)(suan)符與算(suan)(suan)術(shu)表達式
C++中(zhong)的(de)算(suan)術運(yun)算(suan)符(fu)包括基本的(de)算(suan)術運(yun)算(suan)符(fu)和自(zi)增(zeng)、自(zi)減(jian)運(yun)算(suan)符(fu)。由(you)算(suan)術運(yun)算(suan)符(fu)、操作數和括號構成的(de)表達式稱為算(suan)術表達式。
基本算(suan)(suan)(suan)術(shu)運(yun)算(suan)(suan)(suan)符(fu)(fu)有:+(加)、-(減或負號(hao))、*(乘)、/(除)、%(取余(yu))。其(qi)(qi)中(zhong)“-”作(zuo)為(wei)負號(hao)時(shi)為(wei)一元(yuan)運(yun)算(suan)(suan)(suan)符(fu)(fu),其(qi)(qi)余(yu)都為(wei)二元(yuan)運(yun)算(suan)(suan)(suan)符(fu)(fu)。這(zhe)些(xie)基本算(suan)(suan)(suan)術(shu)運(yun)算(suan)(suan)(suan)符(fu)(fu)的意義與數(shu)(shu)學中(zhong)相(xiang)應(ying)符(fu)(fu)號(hao)的意義是一致(zhi)的。它們之間的相(xiang)對優先(xian)級關(guan)系與數(shu)(shu)學中(zhong)的也是一致(zhi)的,即先(xian)乘除、后(hou)加減,同級運(yun)算(suan)(suan)(suan)自左向右進(jin)行。使用算(suan)(suan)(suan)術(shu)運(yun)算(suan)(suan)(suan)符(fu)(fu)要注意以下(xia)幾點(dian):
1、“%”是取余(yu)(yu)運算,只能用于(yu)整型操(cao)作(zuo)數(shu)。表達式a%b的(de)結果(guo)為a/b的(de)余(yu)(yu)數(shu)。“%”的(de)優(you)先級(ji)與“/”相同(tong)。
2、當(dang)“/”用(yong)于兩整型操作數(shu)相除時,其(qi)結果取商的(de)整數(shu)部(bu)分,小(xiao)數(shu)部(bu)分被(bei)自動舍棄。因此,表達式(shi)1/2的(de)結果為0,這一點(dian)需要特別注意。
3、C++中的(de)“++”(自增)、“--”(自減)運算符是使用方便且效率很高的(de)兩個運算符,它們都是一元運算符。
這(zhe)兩個運算符都有(you)前置(zhi)和(he)后(hou)(hou)置(zhi)兩種使用形式(shi),無論寫成前置(zhi)或后(hou)(hou)置(zhi)的(de)(de)形式(shi),它(ta)們的(de)(de)作(zuo)(zuo)用都是(shi)將操作(zuo)(zuo)數的(de)(de)值(zhi)增1(減1)后(hou)(hou),重新(xin)寫回該(gai)操作(zuo)(zuo)數在內存中(zhong)的(de)(de)原有(you)位置(zhi)。所以,如果(guo)變量i原來的(de)(de)值(zhi)是(shi)1,計(ji)算表達式(shi)i++后(hou)(hou),表達式(shi)的(de)(de)結果(guo)為2,并且i的(de)(de)值(zhi)也被(bei)(bei)改(gai)變為2。但是(shi),當(dang)自增、自減運算的(de)(de)結果(guo)要被(bei)(bei)用于繼續(xu)參(can)與其它(ta)操作(zuo)(zuo)時,前置(zhi)與后(hou)(hou)置(zhi)時的(de)(de)情況就完全不同。例(li)如,如果(guo)i的(de)(de)值(zhi)為l,則下列(lie)兩條語(yu)句的(de)(de)執行結果(guo)不同:
1
2
cout<
cout<<++i;
第一條語句首先輸(shu)出(chu)i當(dang)前的值1,然(ran)后i自增,其值變為2;第二條語句首先使i自增為2,然(ran)后輸(shu)出(chu)i的值2。
賦值運算符與賦值表達式
C++提供了幾個賦(fu)(fu)值(zhi)(zhi)運(yun)(yun)算(suan)(suan)符(fu),最簡單的(de)賦(fu)(fu)值(zhi)(zhi)運(yun)(yun)算(suan)(suan)符(fu)就是(shi)“=”。帶有賦(fu)(fu)值(zhi)(zhi)運(yun)(yun)算(suan)(suan)符(fu)的(de)表達(da)式被稱為賦(fu)(fu)值(zhi)(zhi)表達(da)式。例如,m=m+6就是(shi)一(yi)個賦(fu)(fu)值(zhi)(zhi)表達(da)式。賦(fu)(fu)值(zhi)(zhi)表達(da)式的(de)作用就是(shi)將等(deng)號(hao)右(you)邊表達(da)式的(de)值(zhi)(zhi)賦(fu)(fu)給等(deng)號(hao)左邊的(de)對(dui)(dui)象。賦(fu)(fu)值(zhi)(zhi)表達(da)式的(de)類(lei)型(xing)(xing)為等(deng)號(hao)左邊對(dui)(dui)象的(de)類(lei)型(xing)(xing),表達(da)式的(de)結果為等(deng)號(hao)左邊對(dui)(dui)象被賦(fu)(fu)值(zhi)(zhi)后的(de)值(zhi)(zhi),運(yun)(yun)算(suan)(suan)的(de)結合(he)性(xing)為自右(you)向左。請(qing)看下列(lie)賦(fu)(fu)值(zhi)(zhi)表達(da)式的(de)例子(zi)。
1
n=1
表達式值為1。
1
a=b=c=2
這(zhe)個表(biao)達式從右向左運(yun)算,在c被更(geng)新(xin)(xin)為(wei)2后,表(biao)達式c=2的值為(wei)2,接著b的值被更(geng)新(xin)(xin)為(wei)2,最(zui)后a被賦值為(wei)2。
1
a=3+(c=4)
表達式值(zhi)為(wei)7,a的值(zhi)為(wei)7,c為(wei)4。
除了“=”以外,C++還提供了10種復合的賦值運算符:+=,-=,*=,/=,%=,<<=,>>=,&=,“=,|=。其中,前五(wu)個運(yun)算符是(shi)賦(fu)值(zhi)運(yun)算符與算術運(yun)算符復合(he)(he)(he)而成的,后五(wu)個是(shi)賦(fu)值(zhi)運(yun)算符與位運(yun)算符復合(he)(he)(he)而成的。關于位運(yun)算,稍后再做介紹。這里10種運(yun)算符的優先級與“=”相同(tong),結合(he)(he)(he)性(xing)也是(shi)自右向左。現在舉例說(shuo)明復合(he)(he)(he)賦(fu)值(zhi)運(yun)算符的功能。
1
2
b+=2;//等(deng)價(jia)于b=b+2
x*=y+3;//等(deng)價于x=x*(y+3)
1
如果在賦值表達式后面加上分號,便成為了(le)賦值語句(ju)。例如:
b=b+2:便是一個賦(fu)(fu)值(zhi)語(yu)句,它實現的功能與賦(fu)(fu)值(zhi)表達式相同。賦(fu)(fu)值(zhi)表達式與賦(fu)(fu)值(zhi)語(yu)句的不同點在(zai)于:賦(fu)(fu)值(zhi)表達式可以作(zuo)為一個更復雜表達式的一部(bu)分,繼續參與運(yun)算;而賦(fu)(fu)值(zhi)語(yu)句不能。
逗(dou)號運算符與逗(dou)號表達式
在C++中,逗號也是一個運(yun)算符,它的使用形式(shi)為(wei):
<表達式1>,<表達式2>,…,<表達式n>求解(jie)順序(xu)為,先求解(jie)表(biao)(biao)(biao)達(da)(da)式(shi)(shi)(shi)1,再(zai)求解(jie)表(biao)(biao)(biao)達(da)(da)式(shi)(shi)(shi)2,最后求解(jie)表(biao)(biao)(biao)達(da)(da)式(shi)(shi)(shi)n的值(zhi)。逗號表(biao)(biao)(biao)達(da)(da)式(shi)(shi)(shi)的最終結果為表(biao)(biao)(biao)達(da)(da)式(shi)(shi)(shi)n的值(zhi)。例如(ru):
1
x=2*5,x*4
表(biao)達式的結果為40。
關(guan)系運算符和關(guan)系表(biao)達式
關系運算符即比較符。
用關(guan)系(xi)運(yun)算(suan)符將兩(liang)個表(biao)達式(shi)連(lian)接起(qi)來(lai)就是關(guan)系(xi)表(biao)達式(shi)。關(guan)系(xi)表(biao)達式(shi)是一種最簡單的邏輯(ji)表(biao)達式(shi)。例(li)如(ru):
1
2
3
x>5
x+y<=20
c==a+b
注:“==”(等于(yu))是連續(xu)的兩個等號,勿誤寫為賦值運算符“=”。
關(guan)系表(biao)達(da)式(shi)一般(ban)用于(yu)判斷是(shi)否符(fu)合某(mou)一條(tiao)(tiao)件。關(guan)系表(biao)達(da)式(shi)的結果類型為bool,值只能是(shi)true或false。條(tiao)(tiao)件滿足(zu)為true,條(tiao)(tiao)件不滿足(zu)為false。例如,當x=t時(shi),x>5的結果就為false。
邏輯運算符與邏輯表達式(shi)
用邏輯運算符將簡單(dan)的(de)關系表達式(shi)(shi)連接(jie)起來構成較復雜的(de)邏輯表達式(shi)(shi)。邏輯表達式(shi)(shi)的(de)結果類型也為bool,值只能為true或false。
“!”是(shi)一元運算符,使用形(xing)式(shi)是(shi):!操(cao)作(zuo)(zuo)數(shu)。非(fei)運算的(de)作(zuo)(zuo)用是(shi)對操(cao)作(zuo)(zuo)數(shu)取反。如(ru)果(guo)操(cao)作(zuo)(zuo)數(shu)a的(de)值(zhi)(zhi)為(wei)(wei)true,則(ze)表達式(shi)!a的(de)值(zhi)(zhi)為(wei)(wei)false:如(ru)果(guo)操(cao)作(zuo)(zuo)數(shu)a的(de)值(zhi)(zhi)為(wei)(wei)false,則(ze)表達式(shi)!a的(de)值(zhi)(zhi)為(wei)(wei)true。
“&&”是二(er)元運算符。“&&”運算的(de)作(zuo)(zuo)用是求兩(liang)個操作(zuo)(zuo)數(shu)的(de)邏輯(ji)與。只有(you)當兩(liang)個操作(zuo)(zuo)數(shu)的(de)值(zhi)都為(wei)true時,與運算的(de)結果才為(wei)true,其它情況下與運算的(de)結果均(jun)為(wei)false。
“||”也是二元(yuan)運(yun)算(suan)符。“||”運(yun)算(suan)的(de)(de)作(zuo)用(yong)是求兩個操作(zuo)數(shu)的(de)(de)邏輯或。只(zhi)有當兩個操作(zuo)數(shu)的(de)(de)值都為false時(shi),或運(yun)算(suan)的(de)(de)結果才為false,其它情況下或運(yun)算(suan)的(de)(de)結果均(jun)為true。
類所表(biao)示的(de)一(yi)組(zu)對象(xiang)十分相(xiang)似,可以作(zuo)為模(mo)板來有(you)效(xiao)的(de)創建對象(xiang),利(li)用類可以產生(sheng)很(hen)多的(de)對象(xiang)類所代表(biao)的(de)事物或者概念都是抽象(xiang)的(de)。在(zai)存(cun)取Private類型數(shu)據(ju)或者函(han)(han)(han)數(shu)的(de)時候,只有(you)類本身(shen)聲明的(de)函(han)(han)(han)數(shu)才是被允許的(de)。類在(zai)與外部連接(jie)時,利(li)用的(de)就是Public共(gong)有(you)類型函(han)(han)(han)數(shu),任何外部函(han)(han)(han)數(shu)的(de)訪問(wen)都是運行的(de)。
對象(xiang)主(zhu)要(yao)(yao)是(shi)(shi)對客觀事物的(de)某(mou)個(ge)實(shi)體進行描述(shu),它作(zuo)(zuo)為一個(ge)單位,共(gong)同組(zu)(zu)成(cheng)了(le)系(xi)統,它的(de)組(zu)(zu)成(cheng)是(shi)(shi)一組(zu)(zu)屬(shu)性(xing)和一組(zu)(zu)服務,這組(zu)(zu)服務操(cao)作(zuo)(zuo)于這組(zu)(zu)屬(shu)性(xing)。屬(shu)性(xing)和服務是(shi)(shi)對象(xiang)構成(cheng)眾多要(yao)(yao)素中(zhong)的(de)兩(liang)種,屬(shu)性(xing)的(de)實(shi)質是(shi)(shi)一個(ge)數據(ju)項,主(zhu)要(yao)(yao)是(shi)(shi)對對象(xiang)靜態(tai)特性(xing)進行描述(shu),服務的(de)實(shi)質是(shi)(shi)一個(ge)操(cao)作(zuo)(zuo)序列,主(zhu)要(yao)(yao)是(shi)(shi)對對象(xiang)動態(tai)特征進行描述(shu)。
關(guan)(guan)(guan)鍵(jian)字(zi)(keyword)是整個(ge)語言范圍內(nei)預(yu)先保留的(de)標(biao)識符(fu),每個(ge)C++關(guan)(guan)(guan)鍵(jian)字(zi)都有特殊(shu)的(de)含(han)義。經過預(yu)處理(li)后,關(guan)(guan)(guan)鍵(jian)字(zi)從(cong)預(yu)處理(li)記號(preprocessing-token)中區出來,剩下的(de)標(biao)識符(fu)作為記號(token),用于聲明對象(xiang)、函數、類型、命名空間等。不(bu)能聲明與關(guan)(guan)(guan)鍵(jian)字(zi)同名的(de)標(biao)識符(fu)。
各個版本的(de)ISO C++都規定(ding)以下劃線接大寫(xie)字母(mu)起始的(de)標(biao)識(shi)符(fu)保留(liu)給實(shi)現。編譯(yi)器可(ke)以用這(zhe)些(xie)保留(liu)標(biao)識(shi)符(fu)作(zuo)為擴(kuo)展關鍵字,這(zhe)不保證可(ke)移(yi)植(zhi)性。以下討論ISO C++所保留(liu)的(de)關鍵字。
C++與C語(yu)言(yan)(yan)完(wan)全兼容,C語(yu)言(yan)(yan)的絕(jue)大部分內容可以直接用(yong)于C++的程(cheng)序(xu)設(she)計,用(yong)C語(yu)言(yan)(yan)編(bian)寫的程(cheng)序(xu)可以不加修改地用(yong)于C++。
在C++中,類(lei)是支(zhi)持數據(ju)封(feng)裝(zhuang)的工(gong)具,對象(xiang)則是數據(ju)封(feng)裝(zhuang)的實現(xian)。C++通過建(jian)立用(yong)戶定義類(lei)支(zhi)持數據(ju)封(feng)裝(zhuang)和數據(ju)隱藏。
在(zai)面向對(dui)象(xiang)的(de)程序設計中(zhong),將數據和對(dui)該數據進行合(he)法操作(zuo)的(de)函數封(feng)裝在(zai)一起作(zuo)為(wei)一個(ge)類(lei)的(de)定(ding)義(yi)。對(dui)象(xiang)被說明為(wei)具有(you)一個(ge)給定(ding)類(lei)的(de)變量(liang)。每個(ge)給定(ding)類(lei)的(de)對(dui)象(xiang)包含(han)這個(ge)類(lei)所(suo)規定(ding)的(de)若干私(si)有(you)成員(yuan)、公(gong)有(you)成員(yuan)及保護成員(yuan)。完好定(ding)義(yi)的(de)類(lei)一旦建(jian)立,就可看成完全封(feng)裝的(de)實體(ti),可以(yi)作(zuo)為(wei)一個(ge)整體(ti)單元(yuan)使用(yong)。類(lei)的(de)實際(ji)內部工作(zuo)隱藏起來,使用(yong)完好定(ding)義(yi)的(de)類(lei)的(de)用(yong)戶不需要知道(dao)類(lei)的(de)工作(zuo)原理,只(zhi)要知道(dao)如何使用(yong)它即(ji)可。
在C++現(xian)有類(lei)(lei)的(de)(de)(de)基(ji)礎上(shang)可以(yi)聲(sheng)明(ming)新(xin)類(lei)(lei)型(xing),這就是繼(ji)承和重用的(de)(de)(de)思想。通(tong)過繼(ji)承和重用可以(yi)更有效地(di)組織程序結(jie)構,明(ming)確類(lei)(lei)間關(guan)系,并且充分(fen)利用已有的(de)(de)(de)類(lei)(lei)來完成更復雜、深入的(de)(de)(de)開發。新(xin)定義的(de)(de)(de)類(lei)(lei)為子類(lei)(lei),成為派(pai)生(sheng)類(lei)(lei)。它(ta)可以(yi)從父(fu)類(lei)(lei)那里繼(ji)承所有非私有的(de)(de)(de)屬性(xing)和方法,作為自己的(de)(de)(de)成員(yuan)。
采用多態(tai)(tai)性為(wei)每個(ge)類(lei)指定表現行為(wei)。多態(tai)(tai)性形成由父類(lei)和它們的(de)(de)(de)子(zi)類(lei)組成的(de)(de)(de)一(yi)(yi)(yi)(yi)個(ge)樹(shu)型結構。在這個(ge)樹(shu)中的(de)(de)(de)每個(ge)子(zi)類(lei)可以接(jie)收(shou)一(yi)(yi)(yi)(yi)個(ge)或多個(ge)具有相同名字的(de)(de)(de)消息。當一(yi)(yi)(yi)(yi)個(ge)消息被這個(ge)樹(shu)中一(yi)(yi)(yi)(yi)個(ge)類(lei)的(de)(de)(de)一(yi)(yi)(yi)(yi)個(ge)對象接(jie)收(shou)時(shi),這個(ge)對象動態(tai)(tai)地(di)決定給予子(zi)類(lei)對象的(de)(de)(de)消息的(de)(de)(de)某(mou)種用法。多態(tai)(tai)性的(de)(de)(de)這一(yi)(yi)(yi)(yi)特性允許使用高級抽象。
繼(ji)承(cheng)性和(he)多(duo)態(tai)性的(de)組合(he),可以(yi)輕(qing)易地生成一(yi)系列雖然(ran)類似但獨一(yi)無二(er)的(de)對(dui)象(xiang)(xiang)。由(you)于繼(ji)承(cheng)性,這些對(dui)象(xiang)(xiang)共享許多(duo)相似的(de)特(te)征。由(you)于多(duo)態(tai)性,一(yi)個(ge)對(dui)象(xiang)(xiang)可有獨特(te)的(de)表現方(fang)式(shi),而另一(yi)個(ge)對(dui)象(xiang)(xiang)有另一(yi)種表現方(fang)式(shi)。
C++語言(yan)(yan)(yan)(yan)是對C語言(yan)(yan)(yan)(yan)的(de)(de)(de)(de)擴充(chong),從(cong)Simula中吸取(qu)了(le)(le)類(lei)(lei),從(cong)ALGOL語言(yan)(yan)(yan)(yan)中吸取(qu)了(le)(le)運(yun)(yun)算(suan)(suan)符的(de)(de)(de)(de)一名多用(yong)、引用(yong)和(he)在分程(cheng)序中任何位置均可(ke)說明變量(liang),綜(zong)合了(le)(le)Ada語言(yan)(yan)(yan)(yan)的(de)(de)(de)(de)類(lei)(lei)屬(shu)和(he)Clu語言(yan)(yan)(yan)(yan)的(de)(de)(de)(de)模塊特點,形成了(le)(le)抽象(xiang)類(lei)(lei),從(cong)Ada Clu和(he)ML等語言(yan)(yan)(yan)(yan)吸取(qu)了(le)(le)異常(chang)處理,從(cong)BCPL語言(yan)(yan)(yan)(yan)中吸取(qu)了(le)(le)用(yong)//表示注(zhu)釋C++語言(yan)(yan)(yan)(yan)保持(chi)了(le)(le)C語言(yan)(yan)(yan)(yan)的(de)(de)(de)(de)緊湊(cou)靈(ling)活(huo)、高效(xiao)以(yi)及易于(yu)移植性(xing)強等優(you)點,它對數(shu)據抽象(xiang)的(de)(de)(de)(de)支持(chi)主(zhu)(zhu)要在于(yu)類(lei)(lei)概念和(he)機(ji)制,對面向對象(xiang)風范的(de)(de)(de)(de)支持(chi)主(zhu)(zhu)要通過虛擬機(ji)制函數(shu)因(yin)C++語言(yan)(yan)(yan)(yan)既(ji)有(you)數(shu)據抽象(xiang)和(he)面向對象(xiang)能(neng)力,運(yun)(yun)行性(xing)能(neng)高,加上C語言(yan)(yan)(yan)(yan)的(de)(de)(de)(de)普及,而從(cong)C語言(yan)(yan)(yan)(yan)到C++語言(yan)(yan)(yan)(yan)的(de)(de)(de)(de)過渡較為(wei)平(ping)滑,以(yi)及C++語言(yan)(yan)(yan)(yan)與C語言(yan)(yan)(yan)(yan)的(de)(de)(de)(de)兼容程(cheng)度可(ke)使數(shu)量(liang)巨大的(de)(de)(de)(de)C語言(yan)(yan)(yan)(yan)程(cheng)序能(neng)方(fang)便地在C++語言(yan)(yan)(yan)(yan)環境(jing)中復用(yong),使C++語言(yan)(yan)(yan)(yan)在短(duan)短(duan)幾年內能(neng)流行。(計算(suan)(suan)機(ji)軟件專家王汝傳評)
作為最受歡迎的(de)編程語言之一,C++帶給(gei)開發者們(men)最大(da)的(de)驚喜(xi)便是其(qi)強大(da)的(de)特性。一方面(mian)(mian)(mian)跟C兼容,可以直面(mian)(mian)(mian)系(xi)統(tong)底層API,SDK,另一方面(mian)(mian)(mian)提供了很(hen)多范式(shi),足(zu)夠(gou)的(de)抽象能力,面(mian)(mian)(mian)向對(dui)象,操作符重載,模板等(deng)。(腳(jiao)本之家評)