正在閱讀:新手入門:C/C++中枚舉類型(enum)新手入門:C/C++中枚舉類型(enum)

2005-02-26 15:47 出處:PConline 作者:管寧 責(zé)任編輯:xietaoming
 

  如果一個(gè)變量你需要幾種可能存在的值,那么就可以被定義成為枚舉類型。之所以叫枚舉就是說(shuō)將變量或者叫對(duì)象可能存在的情況也可以說(shuō)是可能的值一一例舉出來(lái)。

  舉個(gè)例子來(lái)說(shuō)明一吧,為了讓大家更明白一點(diǎn),比如一個(gè)鉛筆盒中有一支筆,但在沒(méi)有打開(kāi)之前你并不知道它是什么筆,可能是鉛筆也可能是鋼筆,這里有兩種可能,那么你就可以定義一個(gè)枚舉類型來(lái)表示它!

enum box{pencil,pen};//這里你就定義了一個(gè)枚舉類型的變量叫box,這個(gè)枚舉變量?jī)?nèi)含有兩個(gè)元素也稱枚舉元素在這里是pencil和pen,分別表示鉛筆和鋼筆。

  這里要說(shuō)一下,如果你想定義兩個(gè)具有同樣特性枚舉類型的變量那么你可以用如下的兩種方式進(jìn)行定義!

enum box{pencil,pen}; 
 
enum box box2;//或者簡(jiǎn)寫成box box2;

  再有一種就是在聲明的時(shí)候同時(shí)定義。

enum {pencil,pen}box,box2; //在聲明的同時(shí)進(jìn)行定義!

  枚舉變量中的枚舉元素系統(tǒng)是按照常量來(lái)處理的,故叫枚舉常量,他們是不能進(jìn)行普通的算術(shù)賦值的,(pencil=1;)這樣的寫發(fā)是錯(cuò)誤的,但是你可以在聲明的時(shí)候進(jìn)行賦值操作!

enum box{pencil=1,pen=2};

  但是這里要特別注意的一點(diǎn)是,如果你不進(jìn)行元素賦值操作那么元素將會(huì)被系統(tǒng)自動(dòng)從0開(kāi)始自動(dòng)遞增的進(jìn)行賦值操作,說(shuō)到自動(dòng)賦值,如果你只定義了第一個(gè)那么系統(tǒng)將對(duì)下一個(gè)元素進(jìn)行前一個(gè)元素的值加1操作,例如

enum box{pencil=3,pen};//這里pen就是4系統(tǒng)將自動(dòng)進(jìn)行pen=4的定義賦值操作!

  前面說(shuō)了那么多,下面給出一個(gè)完整的例子大家可以通過(guò)以下的代碼的學(xué)習(xí)進(jìn)行更完整的學(xué)習(xí)!

#include <iostream
using namespace std; 
 
void main(void

    enum egg {a,b,c}; 
    enum egg test; //在這里你可以簡(jiǎn)寫成egg test; 
 
    test = c; //對(duì)枚舉變量test進(jìn)行賦予元素操作,這里之所以叫賦元素操作不叫賦值操作就是為了讓大家明白枚舉變量是不能直接賦予算數(shù)值的,例如(test=1;)這樣的操作都是不被編譯器所接受的,正確的方式是先進(jìn)行強(qiáng)制類型轉(zhuǎn)換例如(test = (enum egg) 0;)! 
 
    if (test==c) 
    { 
        cout <<"枚舉變量判斷:test枚舉對(duì)應(yīng)的枚舉元素是c" << endl; 
    } 
 
    if (test==2) 
    { 
        cout <<"枚舉變量判斷:test枚舉元素的值是2" << endl; 
    } 
 
    cout << a << "|" << b << "|" << test <<endl; 
 
    test = (enum egg) 0; //強(qiáng)制類型轉(zhuǎn)換 
    cout << "枚舉變量test值改變?yōu)?" << test <<endl; 
    cin.get(); 
}

  看到這里要最后說(shuō)一個(gè)問(wèn)題,就是枚舉變量中的枚舉元素(或者叫枚舉常量)在特殊情況下是會(huì)被自動(dòng)提升為算術(shù)類型的!

#include <iostream
using namespace std; 
 
void main(void

    enum test {a,b}; 
    int c=1+b; //自動(dòng)提升為算術(shù)類型 
    cout << c <<endl; 
    cin.get(); 
}

302 Found

302 Found


Powered by Tengine
tengine