C/C++中枚舉類型(enum)的使用解惑

        枚舉類型,顧名思義,“枚”作爲量詞,作“個”講,那麼枚舉,就是一個一個的列舉,如果一件事情能夠被一個一個的列舉,那麼它的數量肯定就是有限的,否則是不能被一一列舉出來的。所以枚舉類型即爲能被列舉的常量的一個集合。

在 生活中,枚舉的例子隨處可見,比如禮拜幾,那麼就可以作爲一個枚舉變量。這個變量所存儲的值,是有限的,且,能被我們所列舉。再比較說,性別。它也可以作 爲一個枚舉類型,我們知道,性別也就只有“男”或者“女”,它是可以被我們所列舉的。它能很直觀的表達出我們所定義的事件。

如:定義一個枚舉類型的變量,雖然不知道變量具體是什麼值,但能知道它可能會有哪些值,這樣,這樣,就能對程序中所出現的變量的取值有一個很好的估量,從而使程序的編寫更加順利。

枚舉類型的定義寫結構體的定義相似,其形式爲:

   枚舉的說明與結構和聯合相似其形式爲:

            enum 枚舉名{

               標識符[=整型常數],

               標識符[=整型常數],

               ...

               標識符[=整型常數],

          } 枚舉變量;

    如果枚舉沒有初始化即省掉"=整型常數"則從第一個標識符開始,  依次

次賦給標識符0, 1, 2, ...。但當枚舉中的某個成員賦值後其後的成員按依次

1的規則確定其值。

例如下列枚舉說明後, x1, x2, x3, x4的值分別爲0, 1, 2, 3

     enum string{x1, x2, x3, x4}x;

    當定義改變成:

      enum string

      {

          x1,

          x2=0,

          x3=50,

          x4,

      }x;

    x1=0, x2=0, x3=50, x4=51

    注意:

    1. 枚舉中每個成員(標識符)結束符是",",  不是";", 最後一個成員可省略

","

    2. 初始化時可以賦負數以後的標識符仍依次加1

    3. 枚舉變量只能取枚舉說明結構中的某個標識符常量。

    例如:

      enum string

      {

          x1=5,

          x2,

          x3,

          x4,

      };

     enum strig x=x3;

此時枚舉變量x實際上是7

 

4.在外部,我們可以對枚舉變量進行賦值,不過,得要進行類型轉換。

         如果我們不進行類型輪換,即如下所示進行賦值:

         x = 3;

是不允許是,如果對X進行賦值,只能對3進行類型轉換.即:

x = (string)3;

那麼這樣就對了.

如果給x賦的不是一個整形的數,而是一個字符型的,如:

x = (string)’a’;

那麼這時候x的值並不是字符’a’,而是’a’ASCII碼,我們知道,在枚舉類型中,各常量的值只能是整形的,所以在對上例會自動的將’a’轉換成一個整數值.從內存的角度來看來話,其實C/C++中整形和字符型的變量是一樣的,它們之間可以互相轉換.

 

下面是一個使用枚舉類型的例子.(從網上收集得到)

#include <iostream>

 

#include <iostream>
using namespace std;

enum Day {Saturday, Sunday = 0, Monday, Tuesday, Wednesday,
Thursday, Friday}; //Saturday = 0 by default, Sunday = 0 as well
void Prnt (Day day) // Print whether a day is a 'Weekend' or a "Weekday".
{
if (day ==0) cout << "Weekend" << endl;
else cout << "Weekday" << endl;
}

int main(){
enum Fruit {apple, pear, orange, banana} frt1; // 'frt1' can be declarated here.

// int apple; // error: redefinition of 'apple'

typedef enum Fruit ShuiGuo; // In c++, 'enum' can be omitted.

enum Fruit frt2 = apple; // In c++, 'enum' can be omitted.
ShuiGuo frt3 = pear; // After type-declaration synonym, 'enum' can not exist here!

frt1 = (Fruit) 0; // 'frt1' can be assigned with number by explicit cast.

for (int i = apple; i <= banana; i++)
switch (i)
{
case apple: cout << "apple" << endl; break;
case pear: cout << "pear" << endl; break;
case orange: cout << "orange" << endl; break;
case banana: cout << "banana" << endl; break;
default: break;
}

// Print whether a day is a 'Weekend' or a "Weekday".
Prnt (Saturday);
Prnt (Sunday);
Prnt (Monday);
Prnt (Tuesday);
Prnt (Wednesday);
Prnt (Thursday);
Prnt (Friday);


return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章