C++ 入門指南 4.01
單元 3 - 基本內建型態與物件
C++ 中的基本內建型態 (primitive built-in type) 屬於算術型態 (arithmetic type) ,分成四大類
基本資料型態共有九種,如下表
型態類型 | 關鍵字 | 範圍 |
---|---|---|
布林 | bool | true, false |
字元 | char | 1 位元組 |
寬字元 | wchar_t | 2 位元組 |
UTF-8 字元 | char8_t | 1 位元組 |
UTF-16 字元 | char16_t | 2 位元組 |
UTF-32 字元 | char32_t | 4 位元組 |
整數 | short | 2 位元組 |
整數 | int | 4 位元組 |
整數 | long | 4 位元組 |
整數 | long long | 8 位元組 |
浮點數 | float | 4 位元組 |
浮點數 | double | 8 位元組 |
浮點數 | long double | 12 or 16 位元組 |
1 個位元組 (byte) 有 8 位元 (bit) ,每一個位元表示 0 或 1 的二進位數字。
C++11 的新標準中增加了 char16_t 與 char32_t 表示 UTF-16 及 UTF-32 的字元,另外增加了 long long 的整數型態, C++20 則是新增了 char8_t 表示 UTF-8 字元。
依資料所佔位元數的不同,整數與浮點數各三種,另外布林有一種,字元有兩種。一般來說,資料型態所佔據的位元數越多,可表示的數字範圍也越大。字面常數 (literal) 也就是程式中直接寫出來的數值 (value) ,以下表示布林值 (Boolean value) 、字元 (character) 、整數 (integer) 與浮點數 (floating-point number) 的字面常數
bool a = true; char b = '2'; int c = 2; double d = 2.0;
宣告 (declare) 布林型態的變數 (variable) 使用關鍵字 (keyword) bool , true 為布林值的字面常數,表示邏輯上的真,布林型態的另一個字面常數為 false ,表示邏輯上的假。
字元型態則使用關鍵字 char ,字元型態的字面常數為單引號圍起來的單一字元,或是單引號圍起來,反斜線加上四位的十六位元數字,例如
char e = 'a'; // 小寫英文字母 a char f = '2'; // 阿拉伯數字 2 char g = '.'; // 英文句點 . char h = '%'; // 百分比符號 %
反斜線加上特定英文小寫字母表示跳脫字元,用來表示一些不可見字元,例如
char i = '\n'; // 新行符號 char j = '\t'; // tab 鍵 char k = '\a'; // 響鈴 char l = '\"'; // 雙引號
整數型態共有四種,一般來講,最常使用的是 int 型態,沒有特別指定的整數字面常數也會是 int 型態,而 long 型態又被稱為長整數,字面常數須加上英文字母 L 或 l 的字尾,如
long m = 220L; // 長整數 220 long n = 220l; // 長整數 220
浮點數型態有三種,最常使用的是 double 型態,沒有特別指定的浮點數字面常數也會是 double 型態,若是需要使用 float 型態的浮點數,需要在字面常數加上 F 或 f 的字尾,如
float o = 22.0F; // 浮點數 22.0 float p = 22.0f; // 浮點數 22.0
變數為具名的儲存空間,除了以上九種基本內建型態之外,變數多半表示物件 (object) 。這裡我們照習慣的講法,若變數不是表示基本內建型態就是表示物件,我們只需要知道宣告變數後,該變數就具有屬於宣告型態的記憶體空間就可以了。
例如 demo.cxx 中
// 引入標準程式庫中相關的輸入、輸出程式 #include <iostream> // std 為標準程式庫的命名空間 using namespace std; int main(void) { // 下面建立名稱為 m , string 型態的物件 // 小括弧為 string 的建構子,雙引號為字串字面常數 string m("There is no spoon."); // cout 用來輸出的物件, endl 為新行符號 '\n' cout << endl << m << endl << endl << endl; // 最後回傳 0 給作業系統 return 0; } /* 《程式語言教學誌》的範例程式 http://kaiching.org/ 檔名:demo.cxx 功能:示範簡單的 C++ 程式 作者:張凱慶 */
第 12 行,變數 m 為 string 型態的物件
string m("There is no spoon.");
這裡我們用了最基本的方式建立物件,也就是在變數名稱後接小括弧用建構函數 (constructor) 初始化,另外幾種初始化的方式,其中之一為利用字串 (string) 字面常數
string m = "There is no spoon.";
其他建立物件的方式還可以用指標 (pointer) 變數或 new 關鍵字,接下來我們來看看指標與參考 (reference) 吧!
中英文術語對照 | |
---|---|
布林值 | Boolean value |
算術型態 | arithmetic type |
位元 | bit |
位元組 | byte |
字元 | character |
建構函數 | constructor |
宣告 | declare |
浮點數 | floating-point number |
整數 | integer |
關鍵字 | keyword |
字面常數 | literal |
物件 | object |
指標 | pointer |
基本內建型態 | primitive built-in type |
參考 | reference |
字串 | string |
數值 | value |
變數 | variable |
重點整理 |
---|
1. C++ 的基本內建型態分成四大類,有布林、整數、字元、浮點數。 |
2. 布林型態使用關鍵字 bool 宣告,只有兩種值,一種是 true ,另一種則是 false 。 |
3. 整數型態有四種,關鍵字分別是 short 、 int 、 long 及 long long 。 |
4. 字元型態有兩種,關鍵字分別是 char 及 wchar_t , C++11 新增加了另外兩種, C++20 則新增了一種。 |
5. 浮點數型態有三種,關鍵字分別是 float 、 double 及 long double 。 |
6. 除了基本內建型態外,變數多半表示物件。 |
問題與討論 |
---|
1. 基本內建型態有哪四大類?每一類使用哪些關鍵字? |
2. 為什麼整數型態有四種?浮點數型態有三種?差別在哪裡呢? |
3. 字元跟字串有什麼不同? |
4. 基本內建型態跟物件有什麼不同? |
練習 |
---|
1. 仿照 demo.cxx ,寫一個程式 exercise0301.cxx 宣告 4 種整數型態的變數,並分別設定為 1 、 2 、 3 、 4 ,然後在命令列印出來。 參考程式碼 |
2. 承上題,利用關鍵字 sizeof 可以取得資料型態在記憶體中所佔的位元組數,用法如 size(int) ,利用 sizeof 取得以上四個整數變數個別需要的位元組數,將程式寫在 exercise0302.cxx 中,然後在命令列印出來。 參考程式碼 |
3. 寫一個程式 exercise0303.cxx 宣告 3 種浮點數型態的變數,並分別設定為 0.1 、 0.2 ,然後在命令列印出來。 參考程式碼 |
4. 承上題,繼續利用關鍵字 sizeof 取得三種浮點數變數所佔的位元組數,將程式寫在 exercise0304.cxx 中,然後在命令列印出來。 參考程式碼 |
5. 寫一個程式 exercise0305.cxx 宣告字元型態的變數 a ,並將 a 設定為 'a' ,然後在命令列印出 char(a + 1) 與 char(a + 2) 。 參考程式碼 |
6. 寫一個程式 exercise0306.cxx 並利用關鍵字 sizeof 取得字元及其他四種字元型態所佔的位元組數,然後在命令列印出來。 參考程式碼 |
7. 寫一個程式 exercise0307.cxx 宣告布林型態的變數 a ,並將 a 設定為 true ,然後在命令列印出 a 與 !a 。 參考程式碼 |
8. 承上題,繼續利用關鍵字 sizeof 取得布林變數所佔的位元組數,將程式寫在 exercise0308.cxx 中,然後在命令列印出來。 參考程式碼 |
9. 寫一個程式 exercise0309.cxx ,用 '*' 印出一個三角形,如下示例 * ** *** **** ***** 參考程式碼 |
10. 承上題,將三角形倒過來印,將程式寫在 exercise0310.cxx 中,如下示例 ***** **** *** ** * 參考程式碼 |
相關教學影片
- C++ 程式的基本結構與第一個範例詳解 ⇨ YouTube 頁面連結
- 關鍵字、識別字、字面常數與運算子 ⇨ YouTube 頁面連結
- 基本內建型態、參考與指標 ⇨ YouTube 頁面連結
- 補充:整數、浮點數自動轉換規則 ⇨ YouTube 頁面連結
- 補充: signed 與 unsigned ⇨ YouTube 頁面連結