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