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