HOME ABOUT CONTACT

C/C++教學: 第九之一課 - 列舉(Enum)

Rain November 6, 2024
Outline

1. 列舉簡介

2. 與switch結構搭配的應用

列舉簡介top

所謂列舉(Enum)是指我們可以將一些整數常數包成一個集合,並且將各個常數命名成具有意義的名稱,讓程式碼的可讀性變得更好。因為它較常用於與switch結構搭配,因此我想在這裡先介紹一下。

那麼我們就先來看看列舉的定義語法:


enum {enum name} 
{
    {member name 1},
    {member name 2},
    ....
};
                    

enum actions
{
    MOVE, //初始預設值為0
    STAND,
    TALK,
    LOOK
};
                        

首先我們定義了一個列舉集合,這個名稱為 actions,它代表著一個人的動作,接著我們繼續定義了人的動作有哪些,例如移動(MOVE)、站立(STAND)、說話(TALK)和查看(LOOK)。

這些動作的值是從 0 往上遞增,也就是 MOVE = 0, STAND = 1, TALK = 2, LOOK = 3。若設計者想更改初始數值,例如把 MOVE 的值改成 100,可以定義如下


enum actions
{
    MOVE = 100,
    STAND,
    TALK,
    LOOK
};
                        

接續在後的 STAND、TALK、LOOK 的值就會是從 100 開始往上遞增,如上述類推。

與switch結構搭配的應用top

是否還記得我們在介紹 switch 結構時有提及判斷的主角是單一個整數值? 因為這樣的原因我們很難直接在 switch 裡用 1、2、3 等等來讓設計者們(包括自己)理解判斷的實質意義為何,因此這時候就可以搭配列舉(Enum),來讓這些數字從人類的角度來看可以更顯得容易理解。

舉上述的 actions 列舉例子,我們可以將它應用如下:


enum actions
{
    MOVE = 100,
    STAND,
    TALK,
    LOOK
};

void main()
{
	int a = actions::MOVE;
	switch (a) {
	case actions::MOVE:
		// do something for moving ...
		break;
	case STAND:
		// do somthing for standing ...
		break;
	case TALK:
        // do something for talking ...
		break;
	case LOOK:
        // do something for looking ...
		break;
	}
}
                        

上述範例我們直接定義一個變數 a 為 actions::MOVE,也就是 100,接著我們將變數 a 丟到 switch 結構中做判斷,每個 case 也都用 actions 列舉中的成員來做判斷標示,這樣在程式碼理解上就可以很清楚理解判斷的意義為何,這整段程式碼的用途又是為何就能一目了然了。

下一篇: 第十課 for迴圈

Last updated:

Related Artical List

  1. C/C++教學: 第七課 - 位元運算
  2. C/C++教學: 第八課 - if - else if - else 判斷式結構
  3. C/C++教學: 第十課 for迴圈

Article List