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