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