C++ 快速導覽 - 基本概念

C++ 延伸自 C 語言,最早是 C with classes 的程式語言 (programming language) ,使 C 語言也能使用物件導向 (object-oriented) 的觀念寫程式 (program) 。後來 C++ 與時並進的發展,如今的 C++ 兼具程序化程式設計 (procedural programming) 、物件導向程式設計 (object-oriented programming) 等多種程式設計風格。



所謂的程序化程式設計,就好像不斷的把程序 (procedure) 堆起來,程式就先執行堆在最上面的,執行完就拿掉,然後執行下面一個。物件導向程式設計卻有很大不同,物件 (object) 是分散的,不需要堆疊起來,程式也就是各個物件間的互動



接下來我們以一個簡單的小程式說明 C++ 的基本概念 :)
#include <iostream>
 
int main()
{
    std::cout << "^_^" << std::endl;
    return 0;
}
 
/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:simple.cpp
    功能:簡單的程式範例
    作者:張凱慶
    時間:西元 2010 年 10 月 */


C++ 程式的原始碼 (source code) 副檔名可用 .cc 、 .cxx 、 .cpp 、 .cp 或 .C ,我們所採用的是 .cpp 。先來編譯 (compile) 執行看看吧



Unix-like 的作業系統中,命令列環境下可以直接使用 GCC 的工具 g++ 指令編譯 C++ 原始程式碼,若使用 MS-Windows 或其他作業系統,可能需要額外安裝編譯器來進行編譯。


GCC 編譯 C 或 Objective-C 程式都是用 gcc 指令。


第 1 行
#include <iostream>


這是從 C++ 的標準程式庫 (standard library) 引入輸入或輸出 (I/O) 的功能。 #include 為 C++ 的前置處理器 (preprocessor) 之一,用來引入標頭檔 (header file) 所宣告 (declaration) 的內容,我們後續才會介紹標頭檔的作用,以及如何設計自己的標頭檔。


角括號 < > 圍起來的是標準程式庫中的 iostream ,由於 C++ 的輸入或輸出的功能都被放在標準程式庫之中,所以要在螢幕上顯示訊息,就需要引入這個處理輸入或輸出的標頭檔。


角括號 < > 跟數學所用的小於、大於運算子是相同的符號。


第 3 行到第 7 行
int main()
{
    std::cout << "^_^" << std::endl;
    return 0;
}


這是 main() 函數的宣告及定義。所謂的函數 (function) 是 C++ 程式的基本單位, main 為預設的名稱,也是 C++ 程式執行的起點,因此每個可執行的 C++ 程式原始碼都應該包含一個函數 main() 。函數,就像數學中的函數一樣,代入某些數,然後可以求得某一數,代入的數在程式語言中被稱為參數 (parameter) ,而求得的數被稱為回傳值 (return value) 。


函數名稱後的小括弧 () 就是接受參數的地方,我們的這個例子不需要參數,因此留空白。函數前的 int 為關鍵字 (keyword) 之一。所謂的關鍵字是用為程式語言的語法功能, int 是 C++ 的基本內建型態 (primitive built-in type) 之一,意思為整數 (integer) ,像是 1 、 -90 之類的數字,這裡放在函數名稱前,表示 main() 的回傳值型態為 int ,也就是整數。


main() 底下的一組大括弧 { } 則是函數主體 (function body) ,也就是函數功能實際定義的地方。這個程式實際的工作只有兩行,其中,我們先看到第 6 行
return 0;


return 也為關鍵字之一,用為函數回傳數值之用,通常會放在函數主體定義的最後面。這裡的意思是說,若程式執行成功, main() 便回傳整數 0 給作業系統。


注意, return 空一格才接回傳值整數 0 ,其後接分號,代表這是一個陳述 (statement) 。陳述為 C++ 程式實際執行的單位,當 main() 被作業系統呼叫後,程式由依 main() 中從上到下的陳述順序,逐一執行。


分號 ; 表示陳述的結尾,不可省略。


第 5 行
std::cout << "^_^" << std::endl;


cout 為 ostream 型態 (type) 的物件, ostream 型態則是在標準程式庫中所定義的,為從標準輸出裝置 (standard output) 輸出串流 (stream) 之用,標準輸出裝置通常是指螢幕。前面有 std:: ,這是說 cout 是由名稱空間 (namesapce) std 所定義的,而 :: 為範疇解析運算子 (scope resolution operator) ,接在名稱空間之後,其後才是所用之名稱。


cout 發音為 see-out 。


嗯,這輸出機制已經使用相當多 C++ 的特性,包含物件、運算子、名間空間等,詳細細節先不用擔心,我們陸續都會學到,現在需要認識的就是怎麼去使用這些東西囉! :)


類似的, << 為輸出運算子 (output operator) ,這是用來把接在後面的數值 (value) 輸出到標準輸出裝置,而雙引號圍起來的為字串字面常數 (string literal) ,這是說輸出 "^_^" ,也就是在命令列印出笑臉 ^_^ 。


然後再接一組輸出運算子 << ,表示後面還有其他數值要輸出。這裡輸出的是 endl ,這也是在 std 中定義的名稱,表示一個特殊的值,在命令列印出 ^_^ 後,游標跳到下一行開始。


最後,第 9 行到第 14 行
/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:simple.cpp
    功能:簡單的程式範例
    作者:張凱慶
    時間:西元 2010 年 10 月 */


利用 /* 和 */ 回起來的地方,這是 C++ 多行註解 (comment) 的方式,編譯器 (compiler) 會忽略所有的註解文字,因此註解文字沒有額外的語法規則,也就是說,用任何方式寫註解都可以囉!

利用 /* */ 的多行註解,註解中不可再有其他註解。


C++ 也有單行註解的方式,就是用連續兩個斜線 // ,如
// 這是註解的第一行
// 這是註解的第二行


註解是在程式中附加的說明文字,不同開發團隊會有不同的註解方式。我們所提供的註解主要仍是供教學說明之用。


中英文術語對照
程式語言programming language
物件導向object-oriented
程式program
程序化程式設計procedural programming
物件導向程式設計object-oriented programming
程序procedure
物件object
原始碼source code
編譯compile
標準程式庫standard library
輸入或輸出I/O
前置處理器preprocessor
標頭檔header file
宣告declaration
函數function
參數parameter
回傳值return value
關鍵字keyword
基本內建型態primitive built-in type
整數integer
函數主體function body
陳述statement
型態type
標準輸出裝置standard output
串流stream
名稱空間namesapce
範疇解析運算子scope resolution operator
輸出運算子output operator
數值value
字串字面常數string literal
註解comment
編譯器compiler


您可以繼續參考
基本概念
標記
基本資料型態


相關目錄
回 C++ 快速導覽
回 C++ 教材
回首頁


參考資料
C++ reference
cplusplus.com
Cprogramming.com C++ Tutorial

C++ Primer, Fourth Edition, Stanley B. Lippman...


本文於 2013 年 1 月更新

沒有留言: