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