C++學習(一)
1.
C++ 是 C 的一個超集,事實上,任何合法的 C 程式都是合法的 C++ 程式。
注意:使用靜態型別的程式語言是在編譯時執行型別檢查,而不是在執行時執行型別檢查。
2.
最常用的免費可用的編譯器是 GNU 的 C/C++ 編譯器,如果您使用的是 HP 或 Solaris,則可以使用各自作業系統上的編譯器。
以下部分將指導您如何在不同的作業系統上安裝 GNU 的 C/C++ 編譯器。這裡同時提到 C/C++,主要是因為 GNU 的 gcc 編譯器適合於 C 和 C++ 程式語言。
UNIX/Linux 上的安裝
如果您使用的是 Linux 或 UNIX,請在命令列使用下面的命令來檢查您的系統上是否安裝了 GCC:
$ g++ -v
如果您的計算機上已經安裝了 GNU 編譯器,則會顯示如下訊息:
Using built-in specs.
Target: i386-redhat-linux
Configured with: ../configure --prefix=/usr .......
Thread model: posix
gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)
如果未安裝 GCC,那麼請按照 http://gcc.gnu.org/install/ 上的詳細說明安裝 GCC。
Mac OS X 上的安裝
如果您使用的是 Mac OS X,最快捷的獲取 GCC 的方法是從蘋果的網站上下載 Xcode 開發環境,並按照安裝說明進行安裝。一旦安裝上 Xcode,您就能使用 GNU 編譯器。
Xcode 目前可從 developer.apple.com/technologies/tools/ 上下載。
Windows 上的安裝
為了在 Windows 上安裝 GCC,您需要安裝 MinGW。為了安裝 MinGW,請訪問 MinGW 的主頁 www.mingw.org,進入 MinGW 下載頁面,下載最新版本的 MinGW 安裝程式,命名格式為 MinGW-<version>.exe。
當安裝 MinGW 時,您至少要安裝 gcc-core、gcc-g++、binutils 和 MinGW runtime,但是一般情況下都會安裝更多其他的項。
新增您安裝的 MinGW 的 bin 子目錄到您的 PATH 環境變數中,這樣您就可以在命令列中通過簡單的名稱來指定這些工具。
當完成安裝時,您可以從 Windows 命令列上執行 gcc、g++、ar、ranlib、dlltool 和其他一些 GNU 工具。
程式 g++ 是將 gcc 預設語言設為 C++ 的一個特殊的版本,連結時它自動使用 C++ 標準庫而不用 C 標準庫。通過遵循原始碼的命名規範並指定對應庫的名字,用 gcc 來編譯連結 C++ 程式是可行的,
C++ 中的變數宣告
變數宣告向編譯器保證變數以給定的型別和名稱存在,這樣編譯器在不需要知道變數完整細節的情況下也能繼續進一步的編譯。變數宣告只在編譯時有它的意義,在程式連線時編譯器需要實際的變數宣告。
當您使用多個檔案且只在其中一個檔案中定義變數時(定義變數的檔案在程式連線時是可用的),變數宣告就顯得非常有用。您可以使用 extern 關鍵字在任何地方宣告一個變數。雖然您可以在 C++ 程式中多次宣告一個變數,但變數只能在某個檔案、函式或程式碼塊中被定義一次。
C++ 變數作用域
作用域是程式的一個區域,一般來說有三個地方可以定義變數:
在函式或一個程式碼塊內部宣告的變數,稱為區域性變數。
在函式引數的定義中宣告的變數,稱為形式引數。
在所有函式外部宣告的變數,稱為全域性變數。
區域性變數
在函式或一個程式碼塊內部宣告的變數,稱為區域性變數。它們只能被函式內部或者程式碼塊內部的語句使用。
全域性變數
在所有函式外部定義的變數(通常是在程式的頭部),稱為全域性變數。全域性變數的值在程式的整個生命週期內都是有效的。
全域性變數可以被任何函式訪問。也就是說,全域性變數一旦宣告,在整個程式中都是可用的。
在程式中,區域性變數和全域性變數的名稱可以相同,但是在函式內,區域性變數的值會覆蓋全域性變數的值。
定義常量
在 C++ 中,有兩種簡單的定義常量的方式:
使用 #define 前處理器。
使用 const 關鍵字。
C++ 中的型別限定符
型別限定符提供了變數的額外資訊。
限定符 含義
const const 型別的物件在程式執行期間不能被修改改變。
volatile 修飾符 volatile 告訴編譯器不需要優化volatile宣告的變數,讓程式可以直接從記憶體中讀取變數。對於一般的變數編譯器會對變數進行優化,將記憶體中的變數值放在暫存器中以加快讀寫效率。
restrict 由 restrict 修飾的指標是唯一一種訪問它所指向的物件的方式。只有 C99 增加了新的型別限定符 restrict。
C++ 儲存類
儲存類定義 C++ 程式中變數/函式的範圍(可見性)和生命週期。這些說明符放置在它們所修飾的型別之前。下面列出 C++ 程式中可用的儲存類:
auto
register
static
extern
mutable
thread_local (C++11)
從 C++ 11 開始,auto 關鍵字不再是 C++ 儲存類說明符,且 register 關鍵字被棄用。
函式引數
如果函式要使用引數,則必須宣告接受引數值的變數。這些變數稱為函式的形式引數。
形式引數就像函式內的其他區域性變數,在進入函式時被建立,退出函式時被銷燬。
當呼叫函式時,有兩種向函式傳遞引數的方式:
呼叫型別 描述
傳值呼叫 該方法把引數的實際值複製給函式的形式引數。在這種情況下,修改函式內的形式引數對實際引數沒有影響。
指標呼叫 該方法把引數的地址複製給形式引數。在函式內,該地址用於訪問呼叫中要用到的實際引數。這意味著,修改形式引數會影響實際引數。
引用呼叫 該方法把引數的引用複製給形式引數。在函式內,該引用用於訪問呼叫中要用到的實際引數。這意味著,修改形式引數會影響實際引數。
預設情況下,C++ 使用傳值呼叫來傳遞引數。一般來說,這意味著函式內的程式碼不能改變用於呼叫函式的引數。
C++ 引用
引用變數是一個別名,也就是說,它是某個已存在變數的另一個名字。一旦把引用初始化為某個變數,就可以使用該引用名稱或變數名稱來指向變數。
C++ 引用 vs 指標
引用很容易與指標混淆,它們之間有三個主要的不同:
不存在空引用。引用必須連線到一塊合法的記憶體。
一旦引用被初始化為一個物件,就不能被指向到另一個物件。指標可以在任何時候指向到另一個物件。
引用必須在建立時被初始化。指標可以在任何時間被初始化。