2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
C++ 的基本語法和使用環境 2.1 基本程式開發步驟 2.2 第一個完整的C++ 程式 2.1 基本程式開發步驟 2.2 第一個完整的C++ 程式 2.3 Borland C++ 編譯器的取得和安裝使用 2.4 Visual C++.NET程式開發步驟 2.5 第二個C++ 程式 2.6 C++ 代號的命名規則
基本程式開發步驟 1. 編輯 (edit) 2. 前處理 (preprocess) 3. 編譯 (compile) 4. 聯結 (link) 5. 裝載 (load) 6. 執行 (execute)
基本程式開發步驟示意圖
2.2 第一個完整的C++ 程式 // Test.cpp // 程式的目的是在顯示器上顯示一行文字 #include <iostream> using std::cout; using std::endl; // -- 程式主體部份 --------------------- int main() { cout << "Hello, 您好!" // 主要的敘述 << endl; return 0; } 這個程式包括了註解(comments)、前處理指令(preprocessor directives)以及程式主體三個部份。
註解的目的 1. 在每個檔案的開頭置入一段文字, 以便於日後追查。 2. 補充說明變數和函數等自行定義的 元件之意義,以及使用上的注意事項。 1. 在每個檔案的開頭置入一段文字, 以便於日後追查。 2. 補充說明變數和函數等自行定義的 元件之意義,以及使用上的注意事項。 3. 使程式更容易閱讀。 4. 將程式的某些部份暫時轉成註解,可以不 用真的把該部份程式刪除,隨時可以恢 復,避免重複輸入。
註解的兩種做法 1.從雙斜線「//」的右邊開始,一直到整行結束,都視為註解。 2. 以「/*」開頭,一直到「*/」,中間所包括的文數字或符號都視為註解。
註解的兩種形式 /* Test.cpp 程式的目的是在顯示器上顯示一行文字 */ #include <iostream> using std::cout; using std::endl; // -------- 程式主體部份 --------------- int main() { cout << "Hello, 您好!" /* 主要的敘述 */ << endl; return 0; }
前處理指令 (preprocessor directives) 以符號 # 開頭的指令行在程式編譯前就會由前處理器先行處理,每個前處理指令都必需佔據獨立的一行指令。 #include <iostream> 指令行 using std::cout; using std::endl; 稱為using宣告 (using declaration)。
程式主體 C++ 程式可能含有一個或一個以上的函數,但只能有一個叫做main。 不管main() 是不是程式中第一個出現的函數,程式都是從main() 開始執行。 在main() 左邊的關鍵字int表示main() 的執行結果將會傳回一個整數。與程式本體內的最後一個敘述 return 0; 是對應的。
cout 和 endl cout << "Hello, 您好!" << endl; 「cout」唸作C-Out,代表由標頭檔 <iostream> 定義的一個輸出資料流物件 (output stream object)。運算符號「<<」稱為資料流插入運算子 (stream insertion operator)。 「endl」是一種格式操縱子 (manipulators),用來設定輸出格式。
程式 Test.cpp 的更簡略形式 #include <iostream> using namespace std; int main() { cout << "Hello, 您好!" << endl; return 0; }
using 指令 (using directive) using namespace std; 在using指令之後,所有名稱空間 std內的標準元件都開放出來,不再受限,所以不需要在使用「using std:cout;」 和「using std::endl;」兩個using宣告。
C++ 程式的編排方式 下列的寫法都可以產生正確的輸出結果: (1) #include <iostream> using namespace std; int main() { cout << "Hello, 您好!" << endl; } (2) int main() { cout << "Hello, 您好!" << endl;} (3) int main() {
延遲 DOS 視窗畫面自動關閉的方法 // TestW.cpp // 延遲DOS畫面自動關閉 #include <iostream> using namespace std; // 程式主體部份 int main() { cout << "Hello, 您好!" << endl; system(”PAUSE”); return 0; }
從 Windows XP 檔案總管直接以滑鼠執行 TestW.exe
Edit-Compile-Run 的程式開發流程循環。
使用 Borland 編譯器在 DOS 下編譯和執行範例程式 Test.cpp
Visual C++.NET 程式開發步驟 啟動Visual C++.NET
Visual Studio.NET 的「起始頁」
建立新專案
「Win32 應用程式精靈」視窗
Visual Studio.NET 的設計視窗
PTest.cpp #include "stdafx.h" using namespace std; int main() { cout << "Hello, 您好!" << endl; cin.get () ; return 0; }
完成後的程式碼視窗如下圖所示:
接著在工具列中按下「全部儲存」鈕:
再按下工具列中的「啟動」鈕:
要求重新編譯和執行的「Microsoft Development Environment 視窗」
執行結果
開啟舊專案
插入檔案 「新增檔案」視窗
加入標頭檔
「另存新檔」視窗,完成加入檔案的動作
變數的宣告和使用 所有C++ 程式內的變數都要經由宣告才能使用。 或 int x, y, Sum; int x; // 第一個輸入整數 int y; // 第二個輸入整數 int Sum; // 兩個整數的和
宣告敘述與記憶體空間的對應關係
變數宣告的兩重含意 1. 指定在記憶體內的空間大小 2. 規定這個變數所能接受的運算
rval (right value) 和 lval (left value) 指派運算子「=」右邊的運算元稱為rval (右值),它必須在這個敘述處理前就有確定的值。指派運算子「=」左邊的運算元稱為lval (左值),準備用來存入rval的值;它必須具有足夠的記憶空間,而且是屬於相容的資料型態。
輸入資料流物件 (input stream object) 「cin」 用來配合資料流擷取運算子 (stream extraction operator),「>>」,把來自鍵盤的輸入讀進執行中的程式。例如:cin >> x; cin和cout都是定義於標頭檔<iostream>,也使用std做為namespace。
從顯示器輸出訊息 cout << “請輸入第一個整數\n”; cout << “請輸入第一個整數” << endl;
第二個 C++ 程式 Sum.cpp // Sum.cpp // 要求使用者輸入兩個整數,並把計算結果輸出 #include <iostream> using namespace std; int main() { int x; // 第一個輸入整數 int y; // 第二個輸入整數 int Sum; // 兩個整數的和 cout << "請輸入第一個整數\n"; cin >> x; cout << "請輸入第二個整數\n"; cin >> y; Sum = x + y; cout << "這兩個整數的和是: " << Sum << endl; return 0; }
程式 Sum.cpp 的操作過程
C++ 代號(identifiers)的命名規則 1. 代號由英文字母、數字和底線符號 「_」構成,長度不限。 2. 英文字母的大小寫不同。 3. 開頭不可以用數字。 4. 不可以使用C++ 內設的關鍵字 (keywords)。
C++ 的74個關鍵字。 and and_eq asm auto bitand bitor bool break case catch char class compl const const_cast continue default delete do double dynamic cast else enum explicit export extern false float for friend goto if inline int long mutable namespace new not not_eq operator or or_eq private protected public register reinterpret_c return ast short signed sizeof static static_cast struct switch template this throw true try typedef typeid typename union unsigned using virtual void volatile wchar_t while xor xor_eq
C++ 的代號 (identifiers) 1. 可以接受的代號: Tax Tax_Paid TaxPaid a1 velocity A_1 _GoodDay 2. 錯誤的命名方式: 1b %a -x 合計 asm you&me A@mail