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