百科解釋
程序設(shè)計(jì)語(yǔ)言[編輯本段]CPP是程序設(shè)計(jì)語(yǔ)言C++的另一種書寫形式 它是“C Plus Plus”的簡(jiǎn)稱。是繼C語(yǔ)言之后又一種計(jì)算機(jī)編程語(yǔ)言,C++編程語(yǔ)言同時(shí)支持所有的C語(yǔ)言語(yǔ)法。 C++和C相似:但C是面向過(guò)程的程序設(shè)計(jì)語(yǔ)言,而C++是面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言,不過(guò)C++語(yǔ)言保持了對(duì)C語(yǔ)言的兼容,也就說(shuō)是在C++程序可以不用修改的插入C語(yǔ)言代碼。 cpp是用C++語(yǔ)言編寫的源代碼文件的后綴名。它對(duì)類的強(qiáng)大支持可以使它編寫出更優(yōu)質(zhì)的程序。 酪蛋白磷酸肽[編輯本段]CPP(酪蛋白磷酸肽) 是從牛乳酪蛋白通過(guò)生物技術(shù)制得的一種新型功能性食品添加劑,按日本厚生省分類屬于氨基酸系列。CPP是有磷酸基的肽,它的蛋白前體是α、β-酪蛋白,其生理功能是促進(jìn)鈣、鋅、鐵的吸收,抗蛀牙、提高動(dòng)物受精能力,調(diào)節(jié)血壓。然而在人的小腸下部,pH一般呈中性到弱堿性,在此條件下,礦物質(zhì)不易溶解而產(chǎn)生沉淀,導(dǎo)致對(duì)鈣的吸收率大大下降。因此,僅僅增加膳量中補(bǔ)鈣并不能提高人體對(duì)鈣的吸收率。CPP在小腸內(nèi)能與鈣結(jié)合而形成鈣鹽,這些肽的鈣鹽在生理pH下具有非常好的溶解性,這樣就促進(jìn)了人體對(duì)鈣的吸收。目前,CPP已被公認(rèn)為應(yīng)用面廣泛的功能性食品添加劑,它能促進(jìn)嬰幼兒與青少年的健康成長(zhǎng)和提高中老年人的保健。 船舶專用語(yǔ) CPP (Controllable pitch propeller ) 可調(diào)螺旋槳 【概述】 C++,這個(gè)詞在中國(guó)大陸的程序員圈子中通常被讀做“C加加”,而西方的程序員通常讀做“C plus plus”,它是一種使用非常廣泛的計(jì)算機(jī)編程語(yǔ)言。C++是一種靜態(tài)數(shù)據(jù)類型檢查的,支持多重編程范式的通用程序設(shè)計(jì)語(yǔ)言。它支持過(guò)程化程序設(shè)計(jì)、數(shù)據(jù)抽象、面向?qū)ο蟪绦蛟O(shè)計(jì)、泛型程序設(shè)計(jì)等多種程序設(shè)計(jì)風(fēng)格。 美國(guó)AT&T貝爾實(shí)驗(yàn)室的本賈尼·斯特勞斯特盧普(Bjarne Stroustrup)博士在20世紀(jì)80年代初發(fā)明并實(shí)現(xiàn)了C++(最初這種語(yǔ)言被稱作“C with Classes”)。一開始C++是作為C語(yǔ)言的增強(qiáng)版出現(xiàn)的,從給C語(yǔ)言增加類開始,不斷的增加新特性。虛函數(shù)(virtual function)、運(yùn)算符重載(operator overloading)、多重繼承(multiple inheritance)、模板(template)、異常(exception)、RTTI、名字空間(name space)逐漸被加入標(biāo)準(zhǔn)。1998年國(guó)際標(biāo)準(zhǔn)組織(ISO)頒布了C++程序設(shè)計(jì)語(yǔ)言的國(guó)際標(biāo)準(zhǔn)ISO/IEC 14882-1998。C++是具有國(guó)際標(biāo)準(zhǔn)的編程語(yǔ)言,通常稱作 ANSI/ISO C++。1998年是C++標(biāo)準(zhǔn)委員會(huì)成立的第一年,以后每5年視實(shí)際需要更新一次標(biāo)準(zhǔn),下一次標(biāo)準(zhǔn)更新將是在2009年,目前我們一般稱該標(biāo)準(zhǔn)C++0x。遺憾的是,由于C++語(yǔ)言過(guò)于復(fù)雜,以及他經(jīng)歷了長(zhǎng)年的演變,直到現(xiàn)在(2004年)只有少數(shù)幾個(gè)編譯器完全符合這個(gè)標(biāo)準(zhǔn)(這么說(shuō)也是不完全正確的,事實(shí)上,至今為止沒(méi)有任何一款編譯器完全支持ISO C++)。 另外,就目前學(xué)習(xí)C++而言,可以認(rèn)為他是一門獨(dú)立的語(yǔ)言;他并不依賴C語(yǔ)言,我們可以完全不學(xué)C語(yǔ)言,而直接學(xué)習(xí)C++。根據(jù)《C++編程思想》(Thinking in C++)一書所評(píng)述的,C++與C的效率往往相差在正負(fù)5%之間。所以有人認(rèn)為在大多數(shù)場(chǎng)合C++ 完全可以取代C語(yǔ)言(然而我們?cè)趩纹瑱C(jī)等需要謹(jǐn)慎利用空間、直接操作硬件的地方還是要使用C語(yǔ)言)。 【子語(yǔ)言】 根據(jù)Effective C++第三版第一條款的描述,現(xiàn)在C++由以下四個(gè)“子語(yǔ)言”組成: 1、C子語(yǔ)言。C++支持C語(yǔ)言的幾乎全部功能,在語(yǔ)法上與C語(yǔ)言僅有極微妙的差別(如括號(hào)表達(dá)式的左右值性,具體請(qǐng)參考C++標(biāo)準(zhǔn)文獻(xiàn))。 2、面向?qū)ο蟮腃++。C++首先作為一門面向?qū)ο蟮恼Z(yǔ)言而聞名,這個(gè)特點(diǎn)在這里不再詳述。 3、泛型編程語(yǔ)言。C++強(qiáng)大(但容易失控的)模板功能使它能在編譯期完成許多工作,從而大大提高運(yùn)行期效率。 4、STL(C++標(biāo)準(zhǔn)模板庫(kù))。隨著STL的不斷發(fā)展,它已經(jīng)逐漸成為C++程序設(shè)計(jì)中不可或缺的部分,其效率可能比一般的naive代碼低些,但是其安全性與規(guī)范性使它大受歡迎。 【語(yǔ)言發(fā)展】 C++語(yǔ)言發(fā)展大概可以分為三個(gè)階段:第一階段從80年代到1995年。這一階段C++語(yǔ)言基本上是傳統(tǒng)類型上的面向?qū)ο笳Z(yǔ)言,并且憑借著接近C語(yǔ)言的效率,在工業(yè)界使用的開發(fā)語(yǔ)言中占據(jù)了相當(dāng)大份額;第二階段從1995年到2000年,這一階段由于標(biāo)準(zhǔn)模板庫(kù)(STL)和后來(lái)的Boost等程序庫(kù)的出現(xiàn),泛型程序設(shè)計(jì)在C++中占據(jù)了越來(lái)越多的比重性。當(dāng)然,同時(shí)由于Java、C#等語(yǔ)言的出現(xiàn)和硬件價(jià)格的大規(guī)模下降,C++受到了一定的沖擊;第三階段從2000年至今,由于以Loki、MPL等程序庫(kù)為代表的產(chǎn)生式編程和模板元編程的出現(xiàn),C++出現(xiàn)了發(fā)展歷史上又一個(gè)新的高峰,這些新技術(shù)的出現(xiàn)以及和原有技術(shù)的融合,使C++已經(jīng)成為當(dāng)今主流程序設(shè)計(jì)語(yǔ)言中最復(fù)雜的一員。 【C++的設(shè)計(jì)原則】 &#8226; C++設(shè)計(jì)成靜態(tài)類型、和C同樣高效且可移植的多用途程序設(shè)計(jì)語(yǔ)言。 &#8226; C++設(shè)計(jì)成直接的和廣泛的支援多種程序設(shè)計(jì)風(fēng)格(程序化程序設(shè)計(jì)、資料抽象化、面向?qū)ο蟪绦蛟O(shè)計(jì)、泛型程序設(shè)計(jì))。 &#8226; C++設(shè)計(jì)成給程序設(shè)計(jì)者更多的選擇,即使可能導(dǎo)致程序設(shè)計(jì)者選擇錯(cuò)誤。 &#8226; C++設(shè)計(jì)成盡可能與C兼容,籍此提供一個(gè)從C到C++的平滑過(guò)渡。 &#8226; C++避免平臺(tái)限定或沒(méi)有普遍用途的特性。 &#8226; C++不使用會(huì)帶來(lái)額外開銷的特性。 &#8226; C++設(shè)計(jì)成無(wú)需復(fù)雜的程序設(shè)計(jì)環(huán)境。 出于保證語(yǔ)言的簡(jiǎn)潔和運(yùn)行高效等方面的考慮,C++的很多特性都是以庫(kù)(如STL)或其他的形式提供的,而沒(méi)有直接添加到語(yǔ)言本身里。關(guān)于此類話題,C++之父的《C++語(yǔ)言的設(shè)計(jì)和演化》 里做了詳盡的陳述。 【C++的Hello World程序】 在使用兼容C89標(biāo)準(zhǔn)(也稱為ANSI C)的編譯器時(shí),下面這個(gè)程序顯示“Hello, world!”然后結(jié)束運(yùn)行: (事實(shí)上這并不是符合98標(biāo)準(zhǔn)[ISO C++]的C++程序,而且在多數(shù)編譯器上這個(gè)程序也不能運(yùn)行,若要在比較舊的編譯器上編譯該程序,應(yīng)將iostream改為iostream.h) #include <iostream> int main() { std::cout << "Hello, world! "; return 0; } 在使用兼容C++99標(biāo)準(zhǔn)(ISO/IEC 14882-1998)的編譯器時(shí),下面的程序也是可以的: #include <iostream> 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[]) { ... } 盡管如此,但在大部份(其實(shí)是在Windows平臺(tái)下的大部分)編譯器上, void main() { ... } 也被支持。 【C++程序員的數(shù)量】 分析機(jī)構(gòu)EvansData定期對(duì)開發(fā)人員展開調(diào)查,其調(diào)查結(jié)果與Stroustrup提出的C++正在擴(kuò)張的說(shuō)法相違背。EvansData的數(shù)據(jù)顯示,以C++為工具的開發(fā)人員在整個(gè)開發(fā)界所占的比例由1998年春天的76%下降至2004年秋的46%。 Forrester最新的調(diào)查顯示,C++、微軟VisualBasic和Java是眾多公司產(chǎn)品體系的首選語(yǔ)言。對(duì)100家公司的調(diào)查顯示,C/C++、VisualBasic和Java在產(chǎn)品體系中的使用比例分別是59%、61%和66%。 傳統(tǒng)上認(rèn)為,C++相對(duì)于目前一些新潮的語(yǔ)言,如Java、C#,優(yōu)勢(shì)在于程序的運(yùn)行性能。這種觀念并不完全。如果一個(gè)人深信這一點(diǎn),那么說(shuō)明他并沒(méi)有充分了解和理解C++和那個(gè)某某語(yǔ)言。同時(shí),持有這種觀念的人,通常也是受到了某種誤導(dǎo)(罪魁禍?zhǔn)桩?dāng)然就是那些財(cái)大氣粗的公司)。對(duì)于這些公司而言,他們隱藏了C++同某某語(yǔ)言間的核心差別,而把現(xiàn)在多數(shù)程序員不太關(guān)心的差別,也就是性能,加以強(qiáng)化。因?yàn)殡S著cpu性能的快速提升,性能問(wèn)題已不為人們所關(guān)心。這叫“李代桃僵”。很多涉世不深的程序員,也就相信了他們。于是,大公司們的陰謀也就得逞了。 一般認(rèn)為,使用Java或C#的開發(fā)成本比C++低。但是,如果你能夠充分分析C++和這些語(yǔ)言的差別,會(huì)發(fā)現(xiàn)這句話的成立是有條件的。這個(gè)條件就是:軟件規(guī)模和復(fù)雜度都比較小。如果不超過(guò)3萬(wàn)行有效代碼(不包括生成器產(chǎn)生的代碼),這句話基本上還能成立。否則,隨著代碼量和復(fù)雜度的增加,C++的優(yōu)勢(shì)將會(huì)越來(lái)越明顯。 造成這種差別的就是C++的軟件工程性。在Java和C#大談軟件工程的時(shí)候,C++實(shí)際上已經(jīng)悄悄地將軟件工程性提升到一個(gè)前所未有的高度。這一點(diǎn)被多數(shù)人忽視,并且被大公司竭力掩蓋。 語(yǔ)言在軟件工程上的好壞,依賴于語(yǔ)言的抽象能力。從面向過(guò)程到面向?qū)ο,語(yǔ)言的抽象能力有了一個(gè)質(zhì)的飛躍。但在實(shí)踐中,人們發(fā)現(xiàn)面向?qū)ο鬅o(wú)法解決所有軟件工程中的問(wèn)題。于是,精英們逐步引入、并拓展泛型編程,解決更高層次的軟件工程問(wèn)題。(實(shí)際上,面向?qū)ο蠛头盒途幊痰钠鹪炊伎梢宰匪莸?967年,但由于泛型編程更抽象,所以應(yīng)用遠(yuǎn)遠(yuǎn)落后于面向?qū)ο螅?BR> 【C++語(yǔ)言的應(yīng)用】 哪些程序是用C++寫的: 主流的3種操作系統(tǒng)Windows,Linux,Unix,內(nèi)核都是用C語(yǔ)言和匯編寫的,上層高級(jí)特性是用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)行動(dòng)態(tài)內(nèi)存分配和釋放 運(yùn)算符new和delete是C++新增的運(yùn)算符,提供了存儲(chǔ)的動(dòng)態(tài)分配和釋放功能。它的作用相當(dāng)于C語(yǔ)言的函數(shù)malloc()和free(),但是性能更為優(yōu)越。使用new較之使用malloc()有以下的幾個(gè)優(yōu)點(diǎn): 。1)new自動(dòng)計(jì)算要分配類型的大小,不使用sizeof運(yùn)算符,比較省事,可以避免錯(cuò)誤。 。2)自動(dòng)地返回正確的指針類型,不用進(jìn)行強(qiáng)制指針類型轉(zhuǎn)換。 。3)可以用new對(duì)分配的對(duì)象進(jìn)行初始化。 使用例子: 。1)int ?p; p=new int[10]; //分配一個(gè)含有10個(gè)整數(shù)的整形數(shù)組 delete[] p; //刪除這個(gè)數(shù)組 (2)int ?p; p=new int (100);//動(dòng)態(tài)分配一個(gè)整數(shù)并初始化 二、使用inline內(nèi)連函數(shù)替代宏調(diào)用 對(duì)于頻繁使用的函數(shù),C語(yǔ)言建議使用宏調(diào)用代替函數(shù)調(diào)用以加快代碼執(zhí)行,減少調(diào)用開銷。但是宏調(diào)用有許多的弊端,可能引起不期望的副作用。例如宏:#define abs(a) ((a)<0?(-a):(a)), 當(dāng)使用abs(I++)時(shí),這個(gè)宏就會(huì)出錯(cuò)。 所以在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ù)時(shí),就不再進(jìn)行函數(shù)調(diào)用,而是直接嵌入函數(shù)代碼以加快程序的執(zhí)行。 三、使用函數(shù)重載 在C語(yǔ)言中,兩個(gè)函數(shù)的名稱不能相同,否則會(huì)導(dǎo)致編譯錯(cuò)誤。而在C++中,函數(shù)名相同而參數(shù)不同的兩個(gè)函數(shù)被解釋為重載。例如: void PutHzchar ?str //在當(dāng)前位置輸出漢字 void PutHzint xint ychar ?str //在x,y處輸出漢字 使用函數(shù)重載可以幫助程序員處理更多的復(fù)雜問(wèn)題,避免了使用諸如intabs()、fabs()、dabs()等繁雜的函數(shù)名稱;同時(shí)在大型程序中,使函數(shù)名易于管理和使用,而不必絞盡腦汁地去處理函數(shù)名。 四、使用引用(reference)代替指針進(jìn)行參數(shù)傳遞 在C語(yǔ)言中,如果一個(gè)函數(shù)需要修改用作參數(shù)的變量值的時(shí)候 ,參數(shù)應(yīng)該聲明為指針類型。例如: void Addint ?a ?a ++ 但是對(duì)于復(fù)雜的程序,使用指針容易出錯(cuò),程序也難以讀懂。在C++中,對(duì)于上述情況 可以使用引用來(lái)代替指針,使程序更加清晰易懂。引用就是對(duì)變量取的一個(gè)別名,對(duì)引用進(jìn)行操作,這就相當(dāng)于對(duì)原有變量進(jìn)行操作。例如使用引用的函數(shù)定義為: void Addint a a++ //a為一個(gè)整數(shù)的引用 這個(gè)函數(shù)與使用指針的上一個(gè)函數(shù)的功能是一樣的,然而代碼卻更為簡(jiǎn)潔和清晰易懂。 五、使用缺省參數(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++語(yǔ)言″; //使用缺省參數(shù)在當(dāng)前位置輸出 PutHzxy″C++語(yǔ)言″1010;//沒(méi)有使用缺省參數(shù) 通常的情況下,一個(gè)函數(shù)應(yīng)該具有盡可能大的靈活性。使用缺省參數(shù)為程序員處理更大的復(fù)雜性和靈活性問(wèn)題提供了有效的方法,所以在C++的代碼中都大量地使用了缺省參數(shù)。 需要說(shuō)明的是,所有的缺省參數(shù)必須出現(xiàn)在不缺省參數(shù)的右邊。亦即,一旦開始定義缺省參數(shù),就不可再說(shuō)明非缺省的參數(shù)。 例如: void PutHzxychar ?strint x=-1int y=-1 //正確 void PutHzxyint x=-1int y=-1char ?str //錯(cuò)誤 六、使用模板和BIDS 從Borland C++ 3.1中還引入模板(template)的功能,通過(guò)模板Borland C++實(shí)現(xiàn)了功能強(qiáng)大的BIDS(Borland International Data Structures)。使用BIDS可以不編程實(shí)現(xiàn)存儲(chǔ)任何數(shù)據(jù)類型的數(shù)組、鏈表、堆棧、隊(duì)列等數(shù)據(jù)結(jié)構(gòu)。 下面的例子實(shí)現(xiàn)了一個(gè)存儲(chǔ)整型變量的堆棧: typedef BI_StackAsVector intstack main instack is //定義一個(gè)整型變量的堆棧 forint I=0I(yíng)<10I(yíng)++ is.pushI //10個(gè)數(shù)壓棧 forI=0I(yíng)<10I(yíng)++ cout< 通過(guò)語(yǔ)句is.push(),is.pop()可以對(duì)堆棧進(jìn)行操作。 【C++的集成開發(fā)環(huán)境】 1.visual C++ 2.visual studio 3.Boland C++ 4.C++ Builder 5.eclipse 6.Dev-C++ 對(duì)于C++學(xué)習(xí)者,Bjarne Stroustrup 自薦的2本書: 《C++語(yǔ)言的設(shè)計(jì)和演化》 2001 裘宗燕 譯 《C++ 程序設(shè)計(jì)語(yǔ)言 (特別版)》 2002 裘宗燕 譯
移動(dòng)通信網(wǎng) | 通信人才網(wǎng) | 更新日志 | 團(tuán)隊(duì)博客 | 免責(zé)聲明 | 關(guān)于詞典 | 幫助