C++ 是一種靜態類型的、編譯式的、通用的、大小寫敏感的、不規則的編程語言,支持過程化編程、面向對象編程和泛型編程。
C++ 是 C 的一個超集,事實上,任何合法的 C 程序都是合法的 C++ 程序。
注意:使用靜態類型的編程語言是在編譯時執行類型檢查,而不是在運行時執行類型檢查。
Windows 上的安裝
為了在 Windows 上安裝 GCC,您需要安裝 MinGW。為了安裝 MinGW,請訪問 MinGW 的主頁 www.mingw.org,進入 MinGW 下載頁面,下載最新版本的 MinGW 安裝程序,命名格式為 MinGW-.exe。
當安裝 MinWG 時,您至少要安裝 gcc-core、gcc-g++、binutils 和 MinGW runtime,但是一般情況下都會安裝更多其他的項。
添加您安裝的 MinGW 的 bin 子目錄到您的 PATH 環境變量中,這樣您就可以在命令行中通過簡單的名稱來指定這些工具。
當完成安裝時,您可以從 Windows 命令行上運行 gcc、g++、ar、ranlib、dlltool 和其他一些 GNU 工具。
接下來讓我們看看如何把源代碼保存在一個文件中,以及如何編譯並運行它。下面是簡單的步驟:
打開一個文本編輯器,添加上述代碼。
保存文件為 hello.cpp。
打開命令提示符,進入到保存文件所在的目錄。
鍵入 ‘g++ hello.cpp ‘,輸入回車,編譯代碼。如果代碼中沒有錯誤,命令提示符會跳到下一行,並生成 a.out 可執行文件。
現在,鍵入 ’ a.out’ 來運行程序。
您可以看到屏幕上顯示 ’ Hello World ‘。
$ g++ hello.cpp $ ./a.out Hello World
請確保您的路徑中已包含 g++ 編譯器,並確保在包含源文件 hello.cpp 的目錄中運行它。
您也可以使用 makefile 來編譯 C/C++ 程序。
您可能需要存儲各種數據類型(比如字符型、寬字符型、整型、浮點型、雙浮點型、布爾型等)的信息,操作系統會根據變量的數據類型,來分配內存和決定在保留內存中存儲什麼。
C++ 為程序員提供了種類豐富的內置數據類型和用戶自定義的數據類型。下表列出了七種基本的 C++ 數據類型:
——-寬字符型——————————————-<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPteio7q/7dfWt/vQzc6qQysrtsDT0Mr9vt3A4NDNPC9wPg0KPHA+19a3+7Ojwb/Kx8Co1Nq1pdL9usXW0KGjPC9wPg0KPHA+yOe5+zxzdHJvbmc+s6PBv9LUIEyjqL32tbG089C0yrGjqb+qzbejrNTyse3Kvsv8ysfSu7j2v+3X1rf7s6PBv6OowP3I5yBMJnJzcXVvO3gmcnNxdW87o6mjrLTLyrHL/LHY0Ou05rSi1Nogd2NoYXJfdCDA4NDNtcSx5MG/1tA8L3N0cm9uZz6hozwvcD4NCjxwPrfx1PKjrMv8vs3Kx9K7uPbVrdfWt/uzo8G/o6jA/cjnICZsc3F1bzt4JnJzcXVvO6Opo6y0y8qxy/y/ydLUtOa0otTaIGNoYXIgwODQzbXEvPK1pbHkwb/W0KGjPC9wPg0KPHA+Jm1kYXNoOyZuZGFzaDu/7dfWt/vQzSZtZGFzaDsmbWRhc2g7Jm1kYXNoOyZtZGFzaDsmbWRhc2g7Jm1kYXNoOyZtZGFzaDsmbWRhc2g7Jm1kYXNoOyZtZGFzaDsmbWRhc2g7Jm1kYXNoOyZtZGFzaDsmbWRhc2g7Jm1kYXNoOzwvcD4NCjxwPtK70Km7+bG+wODQzb/J0tTKudPD0ru49rvytuC49sDg0M3Q3srOt/u9+NDQ0N7KzqO6PGJyIC8+DQpzaWduZWQ8YnIgLz4NCnVuc2lnbmVkPGJyIC8+DQpzaG9ydDxiciAvPg0KbG9uZzwvcD4NCjxwPs/Cw+bKtcD9u+HK5LP2xPq158TUyc+499bWyv2+3cDg0M21xLTz0KGhozwvcD4NCjxwcmUgY2xhc3M9"brush:java;">
#include
本實例使用了 endl,這將在每一行後插入一個換行符,<< 運算符用於向屏幕傳多個值。我們也使用 sizeof() 函數來獲取各種數據類型的大小。
當上面的代碼被編譯和執行時,它會產生以下的結果,結果會根據所使用的計算機而有所不同:
Size of char : 1 Size of int : 4 Size of short int : 2 Size of long int : 4 Size of float : 4 Size of double : 8 Size of wchar_t : 4
枚舉類型聲明一個可選的類型名稱和一組標識符,用來作為該類型的值。每個枚舉數是一個枚舉類型的常數。
創建枚舉,需要使用關鍵字 enum。枚舉類型的一般形式為:
enum enum-name { list of names } var-list;
在這裡,enum-name 是枚舉類型的名稱。名稱列表 { list of names } 是用逗號分隔的。
例如,下面的代碼定義了一個顏色枚舉,變量 c 的類型為 color。最後,c 被賦值為 “blue”。
enum color { red, green, blue } c; c = blue;
默認情況下,第一個名稱的值為 0,第二個名稱的值為 1,第三個名稱的值為 2,以此類推。
但是,您也可以給名稱賦予一個特殊的值,只需要添加一個初始值即可。例如,在下面的枚舉中,green 的值為 5。
enum color { red, green=5, blue };
在這裡,blue 的值為 6,因為默認情況下,每個名稱都會比它前面一個名稱大 1。
C++ 允許在 char、int 和 double 數據類型前放置修飾符。修飾符用於改變基本類型的含義,所以它更能滿足各種情境的需求。
下面列出了數據類型修飾符:
signed
unsigned
long
short
修飾符 signed、unsigned、long 和 short 可應用於整型,signed 和 unsigned 可應用於字符型,long 可應用於雙精度型。
修飾符 signed 和 unsigned 也可以作為 long 或 short 修飾符的前綴。例如:unsigned long int。
為了理解 C++ 解釋有符號整數和無符號整數修飾符之間的差別,我們來運行一下下面這個短程序:
#includeusing namespace std; /* * 這個程序演示了有符號整數和無符號整數之間的差別 */ int main() { short int i; // 有符號短整數 short unsigned int j; // 無符號短整數 j = 50000; i = j; cout << i << " " << j; return 0; }
當上面的程序運行時,會輸出下列結果:
-15536 50000
類型限定符提供了變量的額外信息。
存儲類定義 C++ 程序中變量/函數的范圍(可見性)和生命周期。
這些說明符放置在它們所修飾的類型之前。
下面列出 C++ 程序中可用的存儲類:
auto
register
static
extern
mutable
auto 存儲類是所有局部變量默認的存儲類。
{ int mount; auto int month; }
上面的實例定義了兩個帶有相同存儲類的變量,auto 只能用在函數內,即 auto 只能修飾局部變量。
register 存儲類用於定義存儲在寄存器中而不是 RAM 中的局部變量。
這意味著變量的最大尺寸等於寄存器的大小(通常是一個詞),且不能對它應用一元的 ‘&’ 運算符(因為它沒有內存位置)。
{ register int miles; }
寄存器只用於需要快速訪問的變量,比如計數器。還應注意的是,定義 ‘register’ 並不意味著變量將被存儲在寄存器中,它意味著變量可能存儲在寄存器中,這取決於硬件和實現的限制。
static 存儲類指示編譯器在程序的生命周期內保持局部變量的存在,而不需要在每次它進入和離開作用域時進行創建和銷毀。因此,使用 static 修飾局部變量可以在函數調用之間保持局部變量的值。
static 修飾符也可以應用於全局變量。當 static 修飾全局變量時,會使變量的作用域限制在聲明它的文件內。
在 C++ 中,當 static 用在類數據成員上時,會導致僅有一個該成員的副本被類的所有對象共享。
#include// 函數聲明 void func(void); static int count = 10; /* 全局變量 */ int main() { while(count--) { func(); } return 0; } // 函數定義 void func( void ) { static int i = 5; // 局部靜態變量 i++; std::cout << "變量 i 為 " << i ; std::cout << " , 變量 count 為 " << count << std::endl; }
當上面的代碼被編譯和執行時,它會產生下列結果:
變量 i 為 6 , 變量 count 為 9 變量 i 為 7 , 變量 count 為 8 變量 i 為 8 , 變量 count 為 7 變量 i 為 9 , 變量 count 為 6 變量 i 為 10 , 變量 count 為 5 變量 i 為 11 , 變量 count 為 4 變量 i 為 12 , 變量 count 為 3 變量 i 為 13 , 變量 count 為 2 變量 i 為 14 , 變量 count 為 1 變量 i 為 15 , 變量 count 為 0
extern 存儲類用於提供一個全局變量的引用,全局變量對所有的程序文件都是可見的。當您使用 ‘extern’ 時,對於無法初始化的變量,會把變量名指向一個之前定義過的存儲位置。
當您有多個文件且定義了一個可以在其他文件中使用的全局變量或函數時,可以在其他文件中使用 extern 來得到已定義的變量或函數的引用。可以這麼理解,extern 是用來在另一個文件中聲明一個全局變量或函數。
extern 修飾符通常用於當有兩個或多個文件共享相同的全局變量或函數的時候,如下所示:
第一個文件:main.cpp
#includeint count ; extern void write_extern(); int main() { count = 5; write_extern(); }
第二個文件:support.cpp
#includeextern int count; void write_extern(void) { std::cout << "Count is " << count << std::endl; }
在這裡,第二個文件中的 extern 關鍵字用於聲明已經在第一個文件 main.cpp 中定義的 count。現在 ,編譯這兩個文件,如下所示:
$ g++ main.cpp support.cpp -o write
這會產生 write 可執行程序,嘗試執行 write,它會產生下列結果:
$ ./write Count is 5
mutable 說明符僅適用於類的對象,這將在本教程的最後進行講解。它允許對象的成員替代常量。也就是說,mutable 成員可以通過 const 成員函數修改。
運算符是一種告訴編譯器執行特定的數學或邏輯操作的符號。C++ 內置了豐富的運算符,並提供了以下類型的運算符:
算術運算符 關系運算符 邏輯運算符 位運算符 賦值運算符 雜項運算符下表顯示了 C++ 支持的算術運算符。
假設變量 A 的值為 10,變量 B 的值為 20,則:
下表顯示了 C++ 支持的關系運算符。
假設變量 A 的值為 10,變量 B 的值為 20,則:
下表顯示了 C++ 支持的關系邏輯運算符。
假設變量 A 的值為 1,變量 B 的值為 0,則:
下表顯示了 C++ 支持的位運算符。假設變量 A 的值為 60,變量 B 的值為 13,則:
下表列出了 C++ 支持的賦值運算符:
下表列出了 C++ 支持的其他一些重要的運算符。
C++ 支持數組數據結構,它可以存儲一個固定大小的相同類型元素的順序集合。數組是用來存儲一系列數據,但它往往被認為是一系列相同類型的變量。
下面的實例使用了上述的三個概念,即,聲明數組、數組賦值、訪問數組:
#includeusing namespace std; #include using std::setw; int main () { int n[ 10 ]; // n 是一個包含 10 個整數的數組 // 初始化數組元素 for ( int i = 0; i < 10; i++ ) { n[ i ] = i + 100; // 設置元素 i 為 i + 100 } cout << "Element" << setw( 13 ) << "Value" << endl; // 輸出數組中每個元素的值 for ( int j = 0; j < 10; j++ ) { cout << setw( 7 )<< j << setw( 13 ) << n[ j ] << endl; } return 0; }
上面的程序使用了 setw() 函數來格式化輸出。當上面的代碼被編譯和執行時,它會產生下列結果:
Element Value 0 100 1 101 2 102 3 103 4 104 5 105 6 106 7 107 8 108 9 109