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