目前分類:C++ (3)

瀏覽方式: 標題列表 簡短摘要
考這禮拜學的程式以及十誡

MLChen 發表在 痞客邦 留言(0) 人氣()

考筆記內容,詳細情形再問同學

MLChen 發表在 痞客邦 留言(0) 人氣()

C++ 發展歷史
Stroustrup工作起於1979年的C with Classes。這個構思起源於 Stroustrup 做博士論文時的一些程式撰寫經驗。他發現Simula具備很利於大型軟體開發的特點,但Simula的執行速度太慢,無法對現實需求發揮功效;BCPL雖快得多,但它過於低階的特性,使其不適於大型軟體的開發。當Stroustrup開始在貝爾實驗室工作時,他有分析UNIX核心關於分散式計算的問題。回想起他的博士論文經驗,Stroustrup開始為C語言增強一些類似Simula的特點。之所以選擇C,是因為它適於各種用途、快速和可移植性。除了C和Simula之外,同時也從其它語言中取得靈感,如ALGOL 68、Ada、CLU以及ML。剛開始時,類別、衍生類別、儲存類型檢查、內聯和預設參數特性,都是透過Cfront引入C語言之中。1985年10月出現了第一個商業化發佈。

1983年,C with Classes改命名為C++。加入了新的特性,其中包括虛疑函式、函式名和運算子重載、參考、常數、使用者可控制的自由空間儲存區控制、改良的類型檢查,以及新的雙斜線(//)單行註解風格。1985年,發佈第一版《C++程式設計語言》,提供一個重點的語言參考,至此還不是官方標準。1989年,發佈了Release 2.0。引入了多重繼承、抽象類別、靜態成員函式、常數成員函式,以及成員保護。1990年,出版了The Annotated C++ Reference Manual。這本書後來成為標準化的基礎。稍後還引入了模板、異常處理、命名空間、新的強制轉型,以及布林類型。

隨著C++語言的演變,也逐漸演化出相應的標準程式庫。最先加進C++標準函式庫的是串流I/O程式庫,其用以取代傳統的C函式,如printf和scanf。隨後所引入的程式庫中最重要的便是標準模板庫,簡稱STL。

多年後,一個聯合的ANSI-ISO委員會於1998年對C++標準化(ISO/IEC 14882:1998)。在官方釋出1998標準的若干年後,委員會處理缺陷報告,並於2003年發佈一個C++標準的修正版本。2005年,一份名為Library Technical Report 1(簡稱TR1)的技術報告釋出。雖然還不是官方標準的一部分,不過它所提供的幾個擴展可望成為下一版C++標準的一部分。幾乎所有目前仍在維護的C++編譯器皆已支援TR1。

雖然C++免專利,但標準檔案本身並不是免費的。



C++ 名字的由來
C++這個名字是Rick Mascitti於1983年中所建議的,並於1983年12月首次使用。更早以前,尚在研究階段的發展中語言曾被稱為「new C」,之後是「C with Classes」。在電腦科學中,C++仍被稱為C語言的上層結構。它最後得名於C語言中的「++」運算子(其對變數的值進行遞增)。而且在共同的命名約定中,使用「+」以表示增強的程式。Stroustrup說:「這個名字象徵著源自於C語言變化的自然演進」。C+是一個和C/C++無關的早期程式語言。

Rick Mascitti在1992年被非正式地問起名字的由來,他表示這是在半開玩笑中說出的。他從沒想過C++會成為這門語言的正式名字。

有一個關於C++名字的笑話是,當你使用後綴++時,附加只發生在運算之後(因此,它應該是++C,而不是C++)。


C++ 設計原則
在《C++語言的設計和演化》(1994)中,Bjarne Stroustrup描述了他在設計C++時,所使用的一些原則。知道這些原則有助於理解C++為何會是現在這個樣子。以下總結了一些原則,詳盡的內容可參閱《C++語言的設計和演化》:

C++設計成靜態類型、和C同樣高效且可移植的多用途程式設計語言。
C++設計成直接的和廣泛的支援多種程式設計風格(程式化程式設計、資料抽象化、物件導向程式設計、泛型程式設計)。
C++設計成給程式設計者更多的選擇,即使可能導致程式設計者選擇錯誤。
C++設計成盡可能與C相容,藉此提供一個從C到C++的平滑過渡。
C++避免平臺限定或沒有普遍用途的特性。
C++不使用會帶來額外開銷的特性。
C++設計成無需複雜的程式設計環境。


C++ 中的特色
和C語言相比,C++引入了更多的特性,包括︰陳述性宣告,類似函式的強制轉型,new/delete運算子,布林類型,參考類型,預設參數,函式重載,命名空間,類別(包括所有和類別相關的特性,如繼承、成員函式、虛擬函式、抽象類別和建構子),運算子重載,模板,::運算子,異常處理和執行時期識別。

和普遍認為的相反,C++不是第一個引入const關鍵字的。Const是在正式引入C語言不久之後,才被C++採用。

C++在某些案例中(見下「與C不相容之處」),進行比C還要多的類型檢查。

以「//」起始作為註解起源自C的前身BCPL,而後被重新引入到C++。

C++的一些特性,C不久之後也採用了,包括在for迴圈中宣告,C++風格的註解(使用//符號,和inline,雖然C99定義的inline關鍵字與C++的定義不相容。不過,C99也引入了不存在於C++的特性,如︰variadic macros,和以陣列作為參數的較佳處理;某些C++編譯器可能實作若干特性,以作為擴展,但其餘部分並不符合現存的C++特性)

一個常見的混淆其實只是一個微妙的術語問題︰由於它的演化來自C,在C++中的術語物件和C語言一樣是意味著記憶體區域,而不是類別實體,在其它絕大多數的物件導向語言也是如此。舉例來說,在C和C++中,語句int i;定義一個int類型的物件,這就是變數的值i將在賦值時,所存入的記憶體區域。

C++ 開發平台
Visual Studio, Borland C/C++ Builder

MLChen 發表在 痞客邦 留言(0) 人氣()