詞語解釋
CPP(Communication Protocol Processor)是通信協(xié)議處理器的簡稱,是一種高性能的通信芯片,它可以將高速數(shù)據(jù)流轉(zhuǎn)換成低速數(shù)據(jù)流,并將其發(fā)送到接收端。CPP是一種多功能的通信協(xié)議處理器,可以支持多種網(wǎng)絡(luò)協(xié)議,如Ethernet、ATM、Frame Relay、X.25、SONET等。它可以實現(xiàn)多種數(shù)據(jù)傳輸方式,如全雙工、半雙工、點對點、多路復(fù)用等。 CPP的主要功能是支持多種網(wǎng)絡(luò)協(xié)議,實現(xiàn)多種數(shù)據(jù)傳輸方式,并將高速數(shù)據(jù)流轉(zhuǎn)換成低速數(shù)據(jù)流,并將其發(fā)送到接收端。它的主要應(yīng)用是在通信系統(tǒng)中,用于控制和管理數(shù)據(jù)傳輸,比如它可以用于支持多種網(wǎng)絡(luò)協(xié)議的路由器,實現(xiàn)網(wǎng)絡(luò)的路由功能。它也可以用于支持多種數(shù)據(jù)傳輸方式的交換機,實現(xiàn)數(shù)據(jù)的轉(zhuǎn)發(fā)功能。 CPP還可以用于支持多種網(wǎng)絡(luò)協(xié)議的網(wǎng)關(guān),實現(xiàn)網(wǎng)絡(luò)的連接功能。它還可以用于支持多種數(shù)據(jù)傳輸方式的路由器,實現(xiàn)網(wǎng)絡(luò)的路由功能。此外,CPP還可以用于支持多種網(wǎng)絡(luò)協(xié)議的網(wǎng)絡(luò)接口卡,實現(xiàn)網(wǎng)絡(luò)的連接功能。 CPP的應(yīng)用非常廣泛,它可以用于支持多種網(wǎng)絡(luò)協(xié)議的路由器、交換機、網(wǎng)關(guān)、路由器和網(wǎng)絡(luò)接口卡等,實現(xiàn)網(wǎng)絡(luò)的路由、轉(zhuǎn)發(fā)和連接功能。它還可以用于支持多種數(shù)據(jù)傳輸方式,實現(xiàn)高速數(shù)據(jù)流的轉(zhuǎn)換和發(fā)送,滿足不同網(wǎng)絡(luò)環(huán)境下的需求。 程序設(shè)計語言[編輯本段]CPP是程序設(shè)計語言C++的另一種書寫形式 它是“C Plus Plus”的簡稱。是繼C語言之后又一種計算機編程語言,C++編程語言同時支持所有的C語言語法。 C++和C相似:但C是面向過程的程序設(shè)計語言,而C++是面向?qū)ο蟮某绦蛟O(shè)計語言,不過C++語言保持了對C語言的兼容,也就說是在C++程序可以不用修改的插入C語言代碼。 cpp是用C++語言編寫的源代碼文件的后綴名。它對類的強大支持可以使它編寫出更優(yōu)質(zhì)的程序。 酪蛋白磷酸肽[編輯本段]CPP(酪蛋白磷酸肽) 是從牛乳酪蛋白通過生物技術(shù)制得的一種新型功能性食品添加劑,按日本厚生省分類屬于氨基酸系列。CPP是有磷酸基的肽,它的蛋白前體是α、β-酪蛋白,其生理功能是促進(jìn)鈣、鋅、鐵的吸收,抗蛀牙、提高動物受精能力,調(diào)節(jié)血壓。然而在人的小腸下部,pH一般呈中性到弱堿性,在此條件下,礦物質(zhì)不易溶解而產(chǎn)生沉淀,導(dǎo)致對鈣的吸收率大大下降。因此,僅僅增加膳量中補鈣并不能提高人體對鈣的吸收率。CPP在小腸內(nèi)能與鈣結(jié)合而形成鈣鹽,這些肽的鈣鹽在生理pH下具有非常好的溶解性,這樣就促進(jìn)了人體對鈣的吸收。目前,CPP已被公認(rèn)為應(yīng)用面廣泛的功能性食品添加劑,它能促進(jìn)嬰幼兒與青少年的健康成長和提高中老年人的保健。 船舶專用語 CPP (Controllable pitch propeller ) 可調(diào)螺旋槳 【概述】 C++,這個詞在中國大陸的程序員圈子中通常被讀做“C加加”,而西方的程序員通常讀做“C plus plus”,它是一種使用非常廣泛的計算機編程語言。C++是一種靜態(tài)數(shù)據(jù)類型檢查的,支持多重編程范式的通用程序設(shè)計語言。它支持過程化程序設(shè)計、數(shù)據(jù)抽象、面向?qū)ο蟪绦蛟O(shè)計、泛型程序設(shè)計等多種程序設(shè)計風(fēng)格。 美國AT&T貝爾實驗室的本賈尼·斯特勞斯特盧普(Bjarne Stroustrup)博士在20世紀(jì)80年代初發(fā)明并實現(xiàn)了C++(最初這種語言被稱作“C with Classes”)。一開始C++是作為C語言的增強版出現(xiàn)的,從給C語言增加類開始,不斷的增加新特性。虛函數(shù)(virtual function)、運算符重載(operator overloading)、多重繼承(multiple inheritance)、模板(template)、異常(exception)、RTTI、名字空間(name space)逐漸被加入標(biāo)準(zhǔn)。1998年國際標(biāo)準(zhǔn)組織(ISO)頒布了C++程序設(shè)計語言的國際標(biāo)準(zhǔn)ISO/IEC 14882-1998。C++是具有國際標(biāo)準(zhǔn)的編程語言,通常稱作 ANSI/ISO C++。1998年是C++標(biāo)準(zhǔn)委員會成立的第一年,以后每5年視實際需要更新一次標(biāo)準(zhǔn),下一次標(biāo)準(zhǔn)更新將是在2009年,目前我們一般稱該標(biāo)準(zhǔn)C++0x。遺憾的是,由于C++語言過于復(fù)雜,以及他經(jīng)歷了長年的演變,直到現(xiàn)在(2004年)只有少數(shù)幾個編譯器完全符合這個標(biāo)準(zhǔn)(這么說也是不完全正確的,事實上,至今為止沒有任何一款編譯器完全支持ISO C++)。 另外,就目前學(xué)習(xí)C++而言,可以認(rèn)為他是一門獨立的語言;他并不依賴C語言,我們可以完全不學(xué)C語言,而直接學(xué)習(xí)C++。根據(jù)《C++編程思想》(Thinking in C++)一書所評述的,C++與C的效率往往相差在正負(fù)5%之間。所以有人認(rèn)為在大多數(shù)場合C++ 完全可以取代C語言(然而我們在單片機等需要謹(jǐn)慎利用空間、直接操作硬件的地方還是要使用C語言)。 【子語言】 根據(jù)Effective C++第三版第一條款的描述,現(xiàn)在C++由以下四個“子語言”組成: 1、C子語言。C++支持C語言的幾乎全部功能,在語法上與C語言僅有極微妙的差別(如括號表達(dá)式的左右值性,具體請參考C++標(biāo)準(zhǔn)文獻(xiàn))。 2、面向?qū)ο蟮腃++。C++首先作為一門面向?qū)ο蟮恼Z言而聞名,這個特點在這里不再詳述。 3、泛型編程語言。C++強大(但容易失控的)模板功能使它能在編譯期完成許多工作,從而大大提高運行期效率。 4、STL(C++標(biāo)準(zhǔn)模板庫)。隨著STL的不斷發(fā)展,它已經(jīng)逐漸成為C++程序設(shè)計中不可或缺的部分,其效率可能比一般的naive代碼低些,但是其安全性與規(guī)范性使它大受歡迎。 【語言發(fā)展】 C++語言發(fā)展大概可以分為三個階段:第一階段從80年代到1995年。這一階段C++語言基本上是傳統(tǒng)類型上的面向?qū)ο笳Z言,并且憑借著接近C語言的效率,在工業(yè)界使用的開發(fā)語言中占據(jù)了相當(dāng)大份額;第二階段從1995年到2000年,這一階段由于標(biāo)準(zhǔn)模板庫(STL)和后來的Boost等程序庫的出現(xiàn),泛型程序設(shè)計在C++中占據(jù)了越來越多的比重性。當(dāng)然,同時由于Java、C#等語言的出現(xiàn)和硬件價格的大規(guī)模下降,C++受到了一定的沖擊;第三階段從2000年至今,由于以Loki、MPL等程序庫為代表的產(chǎn)生式編程和模板元編程的出現(xiàn),C++出現(xiàn)了發(fā)展歷史上又一個新的高峰,這些新技術(shù)的出現(xiàn)以及和原有技術(shù)的融合,使C++已經(jīng)成為當(dāng)今主流程序設(shè)計語言中最復(fù)雜的一員。 【C++的設(shè)計原則】 &#8226; C++設(shè)計成靜態(tài)類型、和C同樣高效且可移植的多用途程序設(shè)計語言。 &#8226; C++設(shè)計成直接的和廣泛的支援多種程序設(shè)計風(fēng)格(程序化程序設(shè)計、資料抽象化、面向?qū)ο蟪绦蛟O(shè)計、泛型程序設(shè)計)。 &#8226; C++設(shè)計成給程序設(shè)計者更多的選擇,即使可能導(dǎo)致程序設(shè)計者選擇錯誤。 &#8226; C++設(shè)計成盡可能與C兼容,籍此提供一個從C到C++的平滑過渡。 &#8226; C++避免平臺限定或沒有普遍用途的特性。 &#8226; C++不使用會帶來額外開銷的特性。 &#8226; C++設(shè)計成無需復(fù)雜的程序設(shè)計環(huán)境。 出于保證語言的簡潔和運行高效等方面的考慮,C++的很多特性都是以庫(如STL)或其他的形式提供的,而沒有直接添加到語言本身里。關(guān)于此類話題,C++之父的《C++語言的設(shè)計和演化》 里做了詳盡的陳述。 【C++的Hello World程序】 在使用兼容C89標(biāo)準(zhǔn)(也稱為ANSI C)的編譯器時,下面這個程序顯示“Hello, world!”然后結(jié)束運行: (事實上這并不是符合98標(biāo)準(zhǔn)[ISO C++]的C++程序,而且在多數(shù)編譯器上這個程序也不能運行,若要在比較舊的編譯器上編譯該程序,應(yīng)將iostream改為iostream.h) #include int main() { std::cout << "Hello, world! "; return 0; } 在使用兼容C++99標(biāo)準(zhǔn)(ISO/IEC 14882-1998)的編譯器時,下面的程序也是可以的: #include using namespace std; int main() { cout << "Hello, world!" << endl; return 0; } 根據(jù)ISO C++的規(guī)定,main函數(shù)的形式只能是 int main() { ... } 以及 int main(int argc,char * argv[]) { ... } 盡管如此,但在大部份(其實是在Windows平臺下的大部分)編譯器上, void main() { ... } 也被支持。 【C++程序員的數(shù)量】 分析機構(gòu)EvansData定期對開發(fā)人員展開調(diào)查,其調(diào)查結(jié)果與Stroustrup提出的C++正在擴張的說法相違背。EvansData的數(shù)據(jù)顯示,以C++為工具的開發(fā)人員在整個開發(fā)界所占的比例由1998年春天的76%下降至2004年秋的46%。 Forrester最新的調(diào)查顯示,C++、微軟VisualBasic和Java是眾多公司產(chǎn)品體系的首選語言。對100家公司的調(diào)查顯示,C/C++、VisualBasic和Java在產(chǎn)品體系中的使用比例分別是59%、61%和66%。 傳統(tǒng)上認(rèn)為,C++相對于目前一些新潮的語言,如Java、C#,優(yōu)勢在于程序的運行性能。這種觀念并不完全。如果一個人深信這一點,那么說明他并沒有充分了解和理解C++和那個某某語言。同時,持有這種觀念的人,通常也是受到了某種誤導(dǎo)(罪魁禍?zhǔn)桩?dāng)然就是那些財大氣粗的公司)。對于這些公司而言,他們隱藏了C++同某某語言間的核心差別,而把現(xiàn)在多數(shù)程序員不太關(guān)心的差別,也就是性能,加以強化。因為隨著cpu性能的快速提升,性能問題已不為人們所關(guān)心。這叫“李代桃僵”。很多涉世不深的程序員,也就相信了他們。于是,大公司們的陰謀也就得逞了。 一般認(rèn)為,使用Java或C#的開發(fā)成本比C++低。但是,如果你能夠充分分析C++和這些語言的差別,會發(fā)現(xiàn)這句話的成立是有條件的。這個條件就是:軟件規(guī)模和復(fù)雜度都比較小。如果不超過3萬行有效代碼(不包括生成器產(chǎn)生的代碼),這句話基本上還能成立。否則,隨著代碼量和復(fù)雜度的增加,C++的優(yōu)勢將會越來越明顯。 造成這種差別的就是C++的軟件工程性。在Java和C#大談軟件工程的時候,C++實際上已經(jīng)悄悄地將軟件工程性提升到一個前所未有的高度。這一點被多數(shù)人忽視,并且被大公司竭力掩蓋。 語言在軟件工程上的好壞,依賴于語言的抽象能力。從面向過程到面向?qū)ο螅Z言的抽象能力有了一個質(zhì)的飛躍。但在實踐中,人們發(fā)現(xiàn)面向?qū)ο鬅o法解決所有軟件工程中的問題。于是,精英們逐步引入、并拓展泛型編程,解決更高層次的軟件工程問題。(實際上,面向?qū)ο蠛头盒途幊痰钠鹪炊伎梢宰匪莸?967年,但由于泛型編程更抽象,所以應(yīng)用遠(yuǎn)遠(yuǎn)落后于面向?qū)ο螅?BR> 【C++語言的應(yīng)用】 哪些程序是用C++寫的: 主流的3種操作系統(tǒng)Windows,Linux,Unix,內(nèi)核都是用C語言和匯編寫的,上層高級特性是用C++寫的。 《魔獸世界》等幾乎所有的網(wǎng)絡(luò)游戲,百度搜索引擎(Baidu.com),我們所用的大多數(shù)軟件都是用C++寫的(硬件也有很多用到C++的)。 C++之父Bjarne Stroustrup列舉的C++應(yīng)用: Amazon.com:Software for large-scale e-commerce Apple: OS X is written in a mix of language, but a few important parts are C++. The two most interesting are AT&T:The largest US telecommunications provider. o provisioning systems o systems for rapid network recovery after failure Autodesk: A large number of major number of application in the CAD domain Ericsson:o server platform. o TDMA-CDMA HLR o GSM-TDMA-CDMA mobility gateway Google: web search engine, etc。 HP: Here is a tiny fraction of HP&#39;&#39;s C++ apps: o C, C++, Fortran90 compilers, and linker for the new HP IA64 platform (these add to more than 1 million lines of C++ code). IBM: o OS/400. o K42: a high performance, open source, general-purpose operating system kernel for cache-coherent multiprocessors. Intel:o Vtune performace analysis software o compilers and optimizers o lots of chip design and manufacturing software JPL (Jet Propulsion Lab, NASA): Mars rover autonomous driving system (incl. scene analysis and route planning). C++ on Mars! Also lots of supporting software "on the ground" (i.e. Earth). Microsoft:o Windows XP o Windows NT (NT4 and 2000) o Windows 9x (95, 98, Me) o Microsoft Office (Word, Excel, Access, PowerPoint, Outlook) o Internet Explorer (including Outlook Express) o Visual Studio o SQL Mozilla: Firefox browser and Thunderbird mail client (open source) MySQL: MySQL Server (about 250,000 lines of C++) and MySQL Cluster. Arguably the world&#39;&#39;s most popular open source database Nokia: o Mobile Communications radio-station/internet bridges: FlexiGGSN (Gateway GPRS Support Node) and FlexiSGSN (Server GPRS Support Node). o MSC/HLR Sun: o The HotSpot Java Virtual Machine is written in C++ Symbian OS: rationale: "[...] using C++ for all system code, from the kernel upwards." This is one of the most widespread OS&#39;&#39;s for cellular phones KDE from linux is written in C++. telephone systems: I think it would be almost easier to list the systems which aren&#39;&#39;t written in C++。 telephone systems: I think it would be almost easier to list the systems which aren&#39;&#39;t written in C++。telephone systems: I think it would be almost easier to list the systems which aren&#39;&#39;t written in C++。telephone systems: I think it would be almost easier to list the systems which aren&#39;&#39;t written in C++。telephone systems: I think it would be almost easier to list the systems which aren&#39;&#39;t written in C++。telephone systems: I think it would be almost easier to list the systems which aren&#39;&#39;t written in C++。telephone systems: I think it would be almost easier to list the systems which aren&#39;&#39;t written in C++。telephone systems: I think it would be almost easier to list the systems which aren&#39;&#39;t written in C++。 【C++編程技巧】 一、使用new和delete進(jìn)行動態(tài)內(nèi)存分配和釋放 運算符new和delete是C++新增的運算符,提供了存儲的動態(tài)分配和釋放功能。它的作用相當(dāng)于C語言的函數(shù)malloc()和free(),但是性能更為優(yōu)越。使用new較之使用malloc()有以下的幾個優(yōu)點: 。1)new自動計算要分配類型的大小,不使用sizeof運算符,比較省事,可以避免錯誤。 (2)自動地返回正確的指針類型,不用進(jìn)行強制指針類型轉(zhuǎn)換。 (3)可以用new對分配的對象進(jìn)行初始化。 使用例子: 。1)int ?p; p=new int[10]; //分配一個含有10個整數(shù)的整形數(shù)組 delete[] p; //刪除這個數(shù)組 。2)int ?p; p=new int (100);//動態(tài)分配一個整數(shù)并初始化 二、使用inline內(nèi)連函數(shù)替代宏調(diào)用 對于頻繁使用的函數(shù),C語言建議使用宏調(diào)用代替函數(shù)調(diào)用以加快代碼執(zhí)行,減少調(diào)用開銷。但是宏調(diào)用有許多的弊端,可能引起不期望的副作用。例如宏:#define abs(a) ((a)<0?(-a):(a)), 當(dāng)使用abs(I++)時,這個宏就會出錯。 所以在C++中應(yīng)該使用inline內(nèi)連函數(shù)替代宏調(diào)用,這樣既可達(dá)到宏調(diào)用的目的,又避免了宏調(diào)用的弊端。 使用內(nèi)連函數(shù)只須把inline關(guān)鍵字放在函數(shù)返回類型的前面。例如: inline int Add(int a,int b);//聲明Add()為內(nèi)連函數(shù) 這樣編譯器在遇到Add()函數(shù)時,就不再進(jìn)行函數(shù)調(diào)用,而是直接嵌入函數(shù)代碼以加快程序的執(zhí)行。 三、使用函數(shù)重載 在C語言中,兩個函數(shù)的名稱不能相同,否則會導(dǎo)致編譯錯誤。而在C++中,函數(shù)名相同而參數(shù)不同的兩個函數(shù)被解釋為重載。例如: void PutHzchar ?str //在當(dāng)前位置輸出漢字 void PutHzint xint ychar ?str //在x,y處輸出漢字 使用函數(shù)重載可以幫助程序員處理更多的復(fù)雜問題,避免了使用諸如intabs()、fabs()、dabs()等繁雜的函數(shù)名稱;同時在大型程序中,使函數(shù)名易于管理和使用,而不必絞盡腦汁地去處理函數(shù)名。 四、使用引用(reference)代替指針進(jìn)行參數(shù)傳遞 在C語言中,如果一個函數(shù)需要修改用作參數(shù)的變量值的時候 ,參數(shù)應(yīng)該聲明為指針類型。例如: void Addint ?a ?a ++ 但是對于復(fù)雜的程序,使用指針容易出錯,程序也難以讀懂。在C++中,對于上述情況 可以使用引用來代替指針,使程序更加清晰易懂。引用就是對變量取的一個別名,對引用進(jìn)行操作,這就相當(dāng)于對原有變量進(jìn)行操作。例如使用引用的函數(shù)定義為: void Addint a a++ //a為一個整數(shù)的引用 這個函數(shù)與使用指針的上一個函數(shù)的功能是一樣的,然而代碼卻更為簡潔和清晰易懂。 五、使用缺省參數(shù) 在C++中函數(shù)可以使用缺省參數(shù),例如: void PutHzxychar ?strint x=-1int y=-1; if x==-1 x=wherex; if y==-1 y=wherey; movetoxy PutHzstr 可以有兩種方式調(diào)用函數(shù)PutHzxy(),例如: PutHzxy″C++語言″; //使用缺省參數(shù)在當(dāng)前位置輸出 PutHzxy″C++語言″1010;//沒有使用缺省參數(shù) 通常的情況下,一個函數(shù)應(yīng)該具有盡可能大的靈活性。使用缺省參數(shù)為程序員處理更大的復(fù)雜性和靈活性問題提供了有效的方法,所以在C++的代碼中都大量地使用了缺省參數(shù)。 需要說明的是,所有的缺省參數(shù)必須出現(xiàn)在不缺省參數(shù)的右邊。亦即,一旦開始定義缺省參數(shù),就不可再說明非缺省的參數(shù)。 例如: void PutHzxychar ?strint x=-1int y=-1 //正確 void PutHzxyint x=-1int y=-1char ?str //錯誤 六、使用模板和BIDS 從Borland C++ 3.1中還引入模板(template)的功能,通過模板Borland C++實現(xiàn)了功能強大的BIDS(Borland International Data Structures)。使用BIDS可以不編程實現(xiàn)存儲任何數(shù)據(jù)類型的數(shù)組、鏈表、堆棧、隊列等數(shù)據(jù)結(jié)構(gòu)。 下面的例子實現(xiàn)了一個存儲整型變量的堆棧: typedef BI_StackAsVector intstack main instack is //定義一個整型變量的堆棧 forint I=0I<10I++ is.pushI //10個數(shù)壓棧 forI=0I<10I++ cout< 通過語句is.push(),is.pop()可以對堆棧進(jìn)行操作。 【C++的集成開發(fā)環(huán)境】 1.visual C++ 2.visual studio 3.Boland C++ 4.C++ Builder 5.eclipse 6.Dev-C++ 對于C++學(xué)習(xí)者,Bjarne Stroustrup 自薦的2本書: 《C++語言的設(shè)計和演化》 2001 裘宗燕 譯 《C++ 程序設(shè)計語言 (特別版)》 2002 裘宗燕 譯
程序設(shè)計語言[編輯本段]CPP是程序設(shè)計語言C++的另一種書寫形式 它是“C Plus Plus”的簡稱。是繼C語言之后又一種計算機編程語言,C++編程語言同時支持所有的C語言語法。 C++和C相似:但C是面向過程的程序設(shè)計語言,而C++是面向?qū)ο蟮某绦蛟O(shè)計語言,不過C++語言保持了對C語言的兼容,也就說是在C++程序可以不用修改的插入C語言代碼。 cpp是用C++語言編寫的源代碼文件的后綴名。它對類的強大支持可以使它編寫出更優(yōu)質(zhì)的程序。 酪蛋白磷酸肽[編輯本段]CPP(酪蛋白磷酸肽) 是從牛乳酪蛋白通過生物技術(shù)制得的一種新型功能性食品添加劑,按日本厚生省分類屬于氨基酸系列。CPP是有磷酸基的肽,它的蛋白前體是α、β-酪蛋白,其生理功能是促進(jìn)鈣、鋅、鐵的吸收,抗蛀牙、提高動物受精能力,調(diào)節(jié)血壓。然而在人的小腸下部,pH一般呈中性到弱堿性,在此條件下,礦物質(zhì)不易溶解而產(chǎn)生沉淀,導(dǎo)致對鈣的吸收率大大下降。因此,僅僅增加膳量中補鈣并不能提高人體對鈣的吸收率。CPP在小腸內(nèi)能與鈣結(jié)合而形成鈣鹽,這些肽的鈣鹽在生理pH下具有非常好的溶解性,這樣就促進(jìn)了人體對鈣的吸收。目前,CPP已被公認(rèn)為應(yīng)用面廣泛的功能性食品添加劑,它能促進(jìn)嬰幼兒與青少年的健康成長和提高中老年人的保健。 船舶專用語 CPP (Controllable pitch propeller ) 可調(diào)螺旋槳 【概述】 C++,這個詞在中國大陸的程序員圈子中通常被讀做“C加加”,而西方的程序員通常讀做“C plus plus”,它是一種使用非常廣泛的計算機編程語言。C++是一種靜態(tài)數(shù)據(jù)類型檢查的,支持多重編程范式的通用程序設(shè)計語言。它支持過程化程序設(shè)計、數(shù)據(jù)抽象、面向?qū)ο蟪绦蛟O(shè)計、泛型程序設(shè)計等多種程序設(shè)計風(fēng)格。 美國AT&T貝爾實驗室的本賈尼·斯特勞斯特盧普(Bjarne Stroustrup)博士在20世紀(jì)80年代初發(fā)明并實現(xiàn)了C++(最初這種語言被稱作“C with Classes”)。一開始C++是作為C語言的增強版出現(xiàn)的,從給C語言增加類開始,不斷的增加新特性。虛函數(shù)(virtual function)、運算符重載(operator overloading)、多重繼承(multiple inheritance)、模板(template)、異常(exception)、RTTI、名字空間(name space)逐漸被加入標(biāo)準(zhǔn)。1998年國際標(biāo)準(zhǔn)組織(ISO)頒布了C++程序設(shè)計語言的國際標(biāo)準(zhǔn)ISO/IEC 14882-1998。C++是具有國際標(biāo)準(zhǔn)的編程語言,通常稱作 ANSI/ISO C++。1998年是C++標(biāo)準(zhǔn)委員會成立的第一年,以后每5年視實際需要更新一次標(biāo)準(zhǔn),下一次標(biāo)準(zhǔn)更新將是在2009年,目前我們一般稱該標(biāo)準(zhǔn)C++0x。遺憾的是,由于C++語言過于復(fù)雜,以及他經(jīng)歷了長年的演變,直到現(xiàn)在(2004年)只有少數(shù)幾個編譯器完全符合這個標(biāo)準(zhǔn)(這么說也是不完全正確的,事實上,至今為止沒有任何一款編譯器完全支持ISO C++)。 另外,就目前學(xué)習(xí)C++而言,可以認(rèn)為他是一門獨立的語言;他并不依賴C語言,我們可以完全不學(xué)C語言,而直接學(xué)習(xí)C++。根據(jù)《C++編程思想》(Thinking in C++)一書所評述的,C++與C的效率往往相差在正負(fù)5%之間。所以有人認(rèn)為在大多數(shù)場合C++ 完全可以取代C語言(然而我們在單片機等需要謹(jǐn)慎利用空間、直接操作硬件的地方還是要使用C語言)。 【子語言】 根據(jù)Effective C++第三版第一條款的描述,現(xiàn)在C++由以下四個“子語言”組成: 1、C子語言。C++支持C語言的幾乎全部功能,在語法上與C語言僅有極微妙的差別(如括號表達(dá)式的左右值性,具體請參考C++標(biāo)準(zhǔn)文獻(xiàn))。 2、面向?qū)ο蟮腃++。C++首先作為一門面向?qū)ο蟮恼Z言而聞名,這個特點在這里不再詳述。 3、泛型編程語言。C++強大(但容易失控的)模板功能使它能在編譯期完成許多工作,從而大大提高運行期效率。 4、STL(C++標(biāo)準(zhǔn)模板庫)。隨著STL的不斷發(fā)展,它已經(jīng)逐漸成為C++程序設(shè)計中不可或缺的部分,其效率可能比一般的naive代碼低些,但是其安全性與規(guī)范性使它大受歡迎。 【語言發(fā)展】 C++語言發(fā)展大概可以分為三個階段:第一階段從80年代到1995年。這一階段C++語言基本上是傳統(tǒng)類型上的面向?qū)ο笳Z言,并且憑借著接近C語言的效率,在工業(yè)界使用的開發(fā)語言中占據(jù)了相當(dāng)大份額;第二階段從1995年到2000年,這一階段由于標(biāo)準(zhǔn)模板庫(STL)和后來的Boost等程序庫的出現(xiàn),泛型程序設(shè)計在C++中占據(jù)了越來越多的比重性。當(dāng)然,同時由于Java、C#等語言的出現(xiàn)和硬件價格的大規(guī)模下降,C++受到了一定的沖擊;第三階段從2000年至今,由于以Loki、MPL等程序庫為代表的產(chǎn)生式編程和模板元編程的出現(xiàn),C++出現(xiàn)了發(fā)展歷史上又一個新的高峰,這些新技術(shù)的出現(xiàn)以及和原有技術(shù)的融合,使C++已經(jīng)成為當(dāng)今主流程序設(shè)計語言中最復(fù)雜的一員。 【C++的設(shè)計原則】 &#8226; C++設(shè)計成靜態(tài)類型、和C同樣高效且可移植的多用途程序設(shè)計語言。 &#8226; C++設(shè)計成直接的和廣泛的支援多種程序設(shè)計風(fēng)格(程序化程序設(shè)計、資料抽象化、面向?qū)ο蟪绦蛟O(shè)計、泛型程序設(shè)計)。 &#8226; C++設(shè)計成給程序設(shè)計者更多的選擇,即使可能導(dǎo)致程序設(shè)計者選擇錯誤。 &#8226; C++設(shè)計成盡可能與C兼容,籍此提供一個從C到C++的平滑過渡。 &#8226; C++避免平臺限定或沒有普遍用途的特性。 &#8226; C++不使用會帶來額外開銷的特性。 &#8226; C++設(shè)計成無需復(fù)雜的程序設(shè)計環(huán)境。 出于保證語言的簡潔和運行高效等方面的考慮,C++的很多特性都是以庫(如STL)或其他的形式提供的,而沒有直接添加到語言本身里。關(guān)于此類話題,C++之父的《C++語言的設(shè)計和演化》 里做了詳盡的陳述。 【C++的Hello World程序】 在使用兼容C89標(biāo)準(zhǔn)(也稱為ANSI C)的編譯器時,下面這個程序顯示“Hello, world!”然后結(jié)束運行: (事實上這并不是符合98標(biāo)準(zhǔn)[ISO C++]的C++程序,而且在多數(shù)編譯器上這個程序也不能運行,若要在比較舊的編譯器上編譯該程序,應(yīng)將iostream改為iostream.h) #include int main() { std::cout << "Hello, world! "; return 0; } 在使用兼容C++99標(biāo)準(zhǔn)(ISO/IEC 14882-1998)的編譯器時,下面的程序也是可以的: #include using namespace std; int main() { cout << "Hello, world!" << endl; return 0; } 根據(jù)ISO C++的規(guī)定,main函數(shù)的形式只能是 int main() { ... } 以及 int main(int argc,char * argv[]) { ... } 盡管如此,但在大部份(其實是在Windows平臺下的大部分)編譯器上, void main() { ... } 也被支持。 【C++程序員的數(shù)量】 分析機構(gòu)EvansData定期對開發(fā)人員展開調(diào)查,其調(diào)查結(jié)果與Stroustrup提出的C++正在擴張的說法相違背。EvansData的數(shù)據(jù)顯示,以C++為工具的開發(fā)人員在整個開發(fā)界所占的比例由1998年春天的76%下降至2004年秋的46%。 Forrester最新的調(diào)查顯示,C++、微軟VisualBasic和Java是眾多公司產(chǎn)品體系的首選語言。對100家公司的調(diào)查顯示,C/C++、VisualBasic和Java在產(chǎn)品體系中的使用比例分別是59%、61%和66%。 傳統(tǒng)上認(rèn)為,C++相對于目前一些新潮的語言,如Java、C#,優(yōu)勢在于程序的運行性能。這種觀念并不完全。如果一個人深信這一點,那么說明他并沒有充分了解和理解C++和那個某某語言。同時,持有這種觀念的人,通常也是受到了某種誤導(dǎo)(罪魁禍?zhǔn)桩?dāng)然就是那些財大氣粗的公司)。對于這些公司而言,他們隱藏了C++同某某語言間的核心差別,而把現(xiàn)在多數(shù)程序員不太關(guān)心的差別,也就是性能,加以強化。因為隨著cpu性能的快速提升,性能問題已不為人們所關(guān)心。這叫“李代桃僵”。很多涉世不深的程序員,也就相信了他們。于是,大公司們的陰謀也就得逞了。 一般認(rèn)為,使用Java或C#的開發(fā)成本比C++低。但是,如果你能夠充分分析C++和這些語言的差別,會發(fā)現(xiàn)這句話的成立是有條件的。這個條件就是:軟件規(guī)模和復(fù)雜度都比較小。如果不超過3萬行有效代碼(不包括生成器產(chǎn)生的代碼),這句話基本上還能成立。否則,隨著代碼量和復(fù)雜度的增加,C++的優(yōu)勢將會越來越明顯。 造成這種差別的就是C++的軟件工程性。在Java和C#大談軟件工程的時候,C++實際上已經(jīng)悄悄地將軟件工程性提升到一個前所未有的高度。這一點被多數(shù)人忽視,并且被大公司竭力掩蓋。 語言在軟件工程上的好壞,依賴于語言的抽象能力。從面向過程到面向?qū)ο螅Z言的抽象能力有了一個質(zhì)的飛躍。但在實踐中,人們發(fā)現(xiàn)面向?qū)ο鬅o法解決所有軟件工程中的問題。于是,精英們逐步引入、并拓展泛型編程,解決更高層次的軟件工程問題。(實際上,面向?qū)ο蠛头盒途幊痰钠鹪炊伎梢宰匪莸?967年,但由于泛型編程更抽象,所以應(yīng)用遠(yuǎn)遠(yuǎn)落后于面向?qū)ο螅?BR> 【C++語言的應(yīng)用】 哪些程序是用C++寫的: 主流的3種操作系統(tǒng)Windows,Linux,Unix,內(nèi)核都是用C語言和匯編寫的,上層高級特性是用C++寫的。 《魔獸世界》等幾乎所有的網(wǎng)絡(luò)游戲,百度搜索引擎(Baidu.com),我們所用的大多數(shù)軟件都是用C++寫的(硬件也有很多用到C++的)。 C++之父Bjarne Stroustrup列舉的C++應(yīng)用: Amazon.com:Software for large-scale e-commerce Apple: OS X is written in a mix of language, but a few important parts are C++. The two most interesting are AT&T:The largest US telecommunications provider. o provisioning systems o systems for rapid network recovery after failure Autodesk: A large number of major number of application in the CAD domain Ericsson:o server platform. o TDMA-CDMA HLR o GSM-TDMA-CDMA mobility gateway Google: web search engine, etc。 HP: Here is a tiny fraction of HP&#39;&#39;s C++ apps: o C, C++, Fortran90 compilers, and linker for the new HP IA64 platform (these add to more than 1 million lines of C++ code). IBM: o OS/400. o K42: a high performance, open source, general-purpose operating system kernel for cache-coherent multiprocessors. Intel:o Vtune performace analysis software o compilers and optimizers o lots of chip design and manufacturing software JPL (Jet Propulsion Lab, NASA): Mars rover autonomous driving system (incl. scene analysis and route planning). C++ on Mars! Also lots of supporting software "on the ground" (i.e. Earth). Microsoft:o Windows XP o Windows NT (NT4 and 2000) o Windows 9x (95, 98, Me) o Microsoft Office (Word, Excel, Access, PowerPoint, Outlook) o Internet Explorer (including Outlook Express) o Visual Studio o SQL Mozilla: Firefox browser and Thunderbird mail client (open source) MySQL: MySQL Server (about 250,000 lines of C++) and MySQL Cluster. Arguably the world&#39;&#39;s most popular open source database Nokia: o Mobile Communications radio-station/internet bridges: FlexiGGSN (Gateway GPRS Support Node) and FlexiSGSN (Server GPRS Support Node). o MSC/HLR Sun: o The HotSpot Java Virtual Machine is written in C++ Symbian OS: rationale: "[...] using C++ for all system code, from the kernel upwards." This is one of the most widespread OS&#39;&#39;s for cellular phones KDE from linux is written in C++. telephone systems: I think it would be almost easier to list the systems which aren&#39;&#39;t written in C++。 telephone systems: I think it would be almost easier to list the systems which aren&#39;&#39;t written in C++。telephone systems: I think it would be almost easier to list the systems which aren&#39;&#39;t written in C++。telephone systems: I think it would be almost easier to list the systems which aren&#39;&#39;t written in C++。telephone systems: I think it would be almost easier to list the systems which aren&#39;&#39;t written in C++。telephone systems: I think it would be almost easier to list the systems which aren&#39;&#39;t written in C++。telephone systems: I think it would be almost easier to list the systems which aren&#39;&#39;t written in C++。telephone systems: I think it would be almost easier to list the systems which aren&#39;&#39;t written in C++。 【C++編程技巧】 一、使用new和delete進(jìn)行動態(tài)內(nèi)存分配和釋放 運算符new和delete是C++新增的運算符,提供了存儲的動態(tài)分配和釋放功能。它的作用相當(dāng)于C語言的函數(shù)malloc()和free(),但是性能更為優(yōu)越。使用new較之使用malloc()有以下的幾個優(yōu)點: 。1)new自動計算要分配類型的大小,不使用sizeof運算符,比較省事,可以避免錯誤。 (2)自動地返回正確的指針類型,不用進(jìn)行強制指針類型轉(zhuǎn)換。 (3)可以用new對分配的對象進(jìn)行初始化。 使用例子: 。1)int ?p; p=new int[10]; //分配一個含有10個整數(shù)的整形數(shù)組 delete[] p; //刪除這個數(shù)組 。2)int ?p; p=new int (100);//動態(tài)分配一個整數(shù)并初始化 二、使用inline內(nèi)連函數(shù)替代宏調(diào)用 對于頻繁使用的函數(shù),C語言建議使用宏調(diào)用代替函數(shù)調(diào)用以加快代碼執(zhí)行,減少調(diào)用開銷。但是宏調(diào)用有許多的弊端,可能引起不期望的副作用。例如宏:#define abs(a) ((a)<0?(-a):(a)), 當(dāng)使用abs(I++)時,這個宏就會出錯。 所以在C++中應(yīng)該使用inline內(nèi)連函數(shù)替代宏調(diào)用,這樣既可達(dá)到宏調(diào)用的目的,又避免了宏調(diào)用的弊端。 使用內(nèi)連函數(shù)只須把inline關(guān)鍵字放在函數(shù)返回類型的前面。例如: inline int Add(int a,int b);//聲明Add()為內(nèi)連函數(shù) 這樣編譯器在遇到Add()函數(shù)時,就不再進(jìn)行函數(shù)調(diào)用,而是直接嵌入函數(shù)代碼以加快程序的執(zhí)行。 三、使用函數(shù)重載 在C語言中,兩個函數(shù)的名稱不能相同,否則會導(dǎo)致編譯錯誤。而在C++中,函數(shù)名相同而參數(shù)不同的兩個函數(shù)被解釋為重載。例如: void PutHzchar ?str //在當(dāng)前位置輸出漢字 void PutHzint xint ychar ?str //在x,y處輸出漢字 使用函數(shù)重載可以幫助程序員處理更多的復(fù)雜問題,避免了使用諸如intabs()、fabs()、dabs()等繁雜的函數(shù)名稱;同時在大型程序中,使函數(shù)名易于管理和使用,而不必絞盡腦汁地去處理函數(shù)名。 四、使用引用(reference)代替指針進(jìn)行參數(shù)傳遞 在C語言中,如果一個函數(shù)需要修改用作參數(shù)的變量值的時候 ,參數(shù)應(yīng)該聲明為指針類型。例如: void Addint ?a ?a ++ 但是對于復(fù)雜的程序,使用指針容易出錯,程序也難以讀懂。在C++中,對于上述情況 可以使用引用來代替指針,使程序更加清晰易懂。引用就是對變量取的一個別名,對引用進(jìn)行操作,這就相當(dāng)于對原有變量進(jìn)行操作。例如使用引用的函數(shù)定義為: void Addint a a++ //a為一個整數(shù)的引用 這個函數(shù)與使用指針的上一個函數(shù)的功能是一樣的,然而代碼卻更為簡潔和清晰易懂。 五、使用缺省參數(shù) 在C++中函數(shù)可以使用缺省參數(shù),例如: void PutHzxychar ?strint x=-1int y=-1; if x==-1 x=wherex; if y==-1 y=wherey; movetoxy PutHzstr 可以有兩種方式調(diào)用函數(shù)PutHzxy(),例如: PutHzxy″C++語言″; //使用缺省參數(shù)在當(dāng)前位置輸出 PutHzxy″C++語言″1010;//沒有使用缺省參數(shù) 通常的情況下,一個函數(shù)應(yīng)該具有盡可能大的靈活性。使用缺省參數(shù)為程序員處理更大的復(fù)雜性和靈活性問題提供了有效的方法,所以在C++的代碼中都大量地使用了缺省參數(shù)。 需要說明的是,所有的缺省參數(shù)必須出現(xiàn)在不缺省參數(shù)的右邊。亦即,一旦開始定義缺省參數(shù),就不可再說明非缺省的參數(shù)。 例如: void PutHzxychar ?strint x=-1int y=-1 //正確 void PutHzxyint x=-1int y=-1char ?str //錯誤 六、使用模板和BIDS 從Borland C++ 3.1中還引入模板(template)的功能,通過模板Borland C++實現(xiàn)了功能強大的BIDS(Borland International Data Structures)。使用BIDS可以不編程實現(xiàn)存儲任何數(shù)據(jù)類型的數(shù)組、鏈表、堆棧、隊列等數(shù)據(jù)結(jié)構(gòu)。 下面的例子實現(xiàn)了一個存儲整型變量的堆棧: typedef BI_StackAsVector intstack main instack is //定義一個整型變量的堆棧 forint I=0I<10I++ is.pushI //10個數(shù)壓棧 forI=0I<10I++ cout< 通過語句is.push(),is.pop()可以對堆棧進(jìn)行操作。 【C++的集成開發(fā)環(huán)境】 1.visual C++ 2.visual studio 3.Boland C++ 4.C++ Builder 5.eclipse 6.Dev-C++ 對于C++學(xué)習(xí)者,Bjarne Stroustrup 自薦的2本書: 《C++語言的設(shè)計和演化》 2001 裘宗燕 譯 《C++ 程序設(shè)計語言 (特別版)》 2002 裘宗燕 譯
抱歉,此頁面的內(nèi)容受版權(quán)保護(hù),復(fù)制需扣除次數(shù),次數(shù)不足時需付費購買。
如需下載請點擊:點擊此處下載
掃碼付費即可復(fù)制
埋式光纜 | 電路域與分組域 | PTMRB | 雅虎 | DU | DU meter | TAXI | wifi | KDF | mctr | RNTI | 天語手機 |
移動通信網(wǎng) | 通信人才網(wǎng) | 更新日志 | 團隊博客 | 免責(zé)聲明 | 關(guān)于詞典 | 幫助