[列舉] 使用

定義列舉型態時
在沒有指定的狀態下
C++會自動給常數一個整數值
第一個常數為0、第二個常數為1 ……….以此類推

Ex:

#include <iostream>
using namespace std;

enum mood{happy,sad,soso}m1,m2;     //"happy"被設為0,"sad"被設為1,"soso"被設為2 

int main(){



}



為什麼C++要為它們設值呢?
因為它把列舉型態視為整數型態
所以使用列舉型態時
實際上是以整數型態處理
要特別注意:
列舉型態可以自動轉換成整數型態
整數型態不可以自動轉換成列舉型態
需要使用特殊格式做轉換
整數型態轉換成列舉型態
列舉型態變數=static_cast<列舉型態名稱> (欲轉換內容);

Ex:

#include <iostream>
using namespace std;

enum mood{happy,sad,soso}m1,m2;     //"happy"被設為0,"sad"被設為1,"soso"被設為2 

int main(){

 mood m1;
 
 m1=static_cast<mood> (1);       //將變數m1設為sad(1) 

}

定義列舉型態時
可以使用自己設定的列舉值

設定的列舉值
後面的值會由所設定的值開始遞增
可以有多個列舉值相同

Ex:

 

enum bits  { one=1, two=2, four=4, eight=8 };                                      
1 2 4 8





enum bitstep{first, second=100, third };                                             
0 100 101




enum  f {  a, b=0 ,c ,d=1  };
0 0 1 1

一般輸出列舉型態時
會以整數型態輸出
如果希望可以印出列舉型態的名稱
可以使用for迴圈跟字串實作

Ex:

 

#include <iostream>
#include <string>
using namespace std;

enum mood{happy,sad,soso};
    
int main(void)
{
 enum mood m1;
 
 string a[3]={"happy","sad","soso"};
 
 for(m1=happy;m1<=soso;m1=static_cast<mood>(m1+1))
        cout << "mood(" << m1 << ")=" << a[m1] << endl;

}

有疑問? 留個言吧!

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料