C++ 語言是從C語言發展而來的。
C語言有很多優點,也有很多不足。如對型別匹配的檢查不夠嚴格、基本沒有支援程式碼重用的機制、不支援物件導向等。這使得在用C語言開發大規模的軟體時,維護和擴充都比較困難。
1980 年,貝爾實驗室的 Bjarne Stroustmp 開始對C語言進行改進,為其加入物件導向的特性。最初,這種新語言被稱為“帶類的C(C with Classes)”。
1983 年,“帶類的C”加入虛擬函式、函數和運算子過載、參照等概念後,正式定名為“C++(C plus plus)”。
1985 年,C++ 最權威的著作、由 Bjarne Stroustmp 撰寫的《C++程式設計語言》(The C+ + Programming Language)第一版發布。
1989 年,C++ 2.0 版發布,加入了多重繼承、抽象類、靜態成員、常數成員函數等概念。1990 年,又加入了模板、例外處理、命名空間等機制。
1994 年,ANSI C++ 標準發布。
1998 年,ANSI(美國國家標準協會)和 ISO(國際標準化組織)聯合發佈了至今使用最為廣泛的 C++ 標準,稱為 C++ 98。C++ 98 最為重大的改進就是加入了 “標準模板庫”(Standard Template Library, STL),使得“泛型程式設計”成為 C++ 除“物件導向”外的另一主要特點。
2003 年,ISO 的 C++ 標準委員會又對 C++ 略做了一些修訂,發布了 C++ 03 標準。C++ 03 和 C++ 98 的區別對大多數程式設計師來說可以不必關心。
2005 年,一份名為 Library Technical Report 1(簡稱 TR1)的技術報告發布,為 C++ 加入了正規表示式、雜湊表等重要類別範本。雖然 TR1 當時沒有正式成為 C++ 標準,但如今的許多 C++ 編譯器都已經支援 TR1 中的特性。
2011 年 9 月,ISO 通過了新的 C+ + 標準,這就是 C++11。C++11 在醞釀的過程中被稱為 C++ 0x,因為 Bjame Stroustmp 原本預計它應該在 2008 年或 2009 年發布。 C++11 對 C++ 的語言特性和標準庫都做了比較大的擴充,TR1 中的許多特性正式成為 C++11 標準的一部分。
當前比較流行的 C++ 編譯器有 GCC、微軟公司的 Visual Studio 2015、Dev C++ 等。Dev C++ 核心的編譯器實際上還是 GCC,只不過是用 IDE(整合式開發環境)將其包裝起來,更加便於使用。Visual Studio 功能最為強大,但是體積巨大而且價格昂貴;Dev C++ 只有幾十兆位元組大小,而且免費。推薦讀者使用這兩種編譯器。
本書中的程式,除非特別說明,都能在上述兩種編譯器中編譯通過,而且執行結果相同。
有兩個網站用來檢視 C++ 的各種函數、模板、類的用法特別方便,它們是:
http://www.cplusplus.com
http://www.cppreference.com
C++中的標頭檔案
在 C++ 中,標頭檔案不再以
.h
結尾,例如下一節提到的標頭檔案 iostream。一些C語言中常用的標頭檔案在 C++ 中的名字變為去掉
.h
,並在開頭增加字元
c
。例如:
#include <cstdio>
#include <cstring>
#include <cstdlib>
強制型別轉換運算子的新形式
在 C++ 中,強制型別轉換可以寫成以下形式:
型別名(待轉換的表示式)
例如,int(3.5)、double(2)、double(a) 等看起來像函數呼叫,比C語言中 (int)3.5、(double)a 的寫法更清晰。