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