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