c++中的enum类型
C++?允許程序員創建自己的數據類型,比如本節要將的枚舉類型。枚舉數據類型是一種由程序員定義的數據類型,其合法值是與它們關聯的一組命名整數常量。
之所以被稱為枚舉類型,就是因為命名常量是作為數據類型定義的一部分而枚舉或列出的,以下是枚舉類型聲明的示例:
enum Roster {Tom, Sharon, Bill, Teresa, John};
該語句將創建一個名為 Roster 的數據類型。因為單詞 enum 是 C++ 關鍵字,所以它必須小寫,值得注意的是,數據類型本身的名字是以大寫字母開頭的。雖然這并非必須,但是絕大多數程序員都會釆用首字母大寫的形式。
和 Roster 數據類型關聯的命名整數常量被稱為枚舉量,Roster 數據類型的變量可能只是關聯到這些枚舉量的值之一,但它們的值是什么呢?
默認情況下,編譯器設置第一個枚舉量為 0,下一個為 1,以此類推。在上述示例中,Tom 的值將是 0,Sharon 的值為 1,等等。最后一個枚舉量 John 的值為 4。
重要的是要意識到,enum 語句示例實際上并沒有創建任何變量,只是定義數據類型。當以后創建這個數據類型的變量時,它們看起來就是整數,并且這些整數的值被限制在與枚舉集合中的符號名稱相關聯的整數上。以下語句顯示了如何定義 Roster 數據類型的變量:
Roster student;
此語句的形式與其他任何變量定義一樣,首先是數據類型名稱,然后是變量名稱。請注意,數據類型名稱是 Roster,而不是 enum Roster。
現在已經創建了 student 變量,它可以被賦予一個值,如下所示:
student = Sharon;
變量的值可以這樣測試:
if (student == Sharon)
請注意,在這兩個例子中,Sharon 周圍沒有引號。因為它是一個命名常量,而不是字符串常數。
即使枚舉數據類型中的值實際存儲為整數,也不能總是將整數值替換為符號名稱。例如,不能使用下面的語句將 Sharon 賦值給 student:
student = 1; //錯誤
但是,可以使用整數值而不是符號名稱來測試枚舉變量。例如,以下兩個 if 語句是等效的:
if (student == Bill)
if (student == 2)
還可以使用關系運算符來比較兩個枚舉變量。例如,以下 if 語句確定存儲在 student1 中的值是否小于存儲在 student2 中的值:
if (student1 <student2)
如果 student1 等于 Bill,student2 等于 John,則該語句為 true。但是,如果 student1 等于 Bill,而 student2 等于 Sharon,則該語句將為 false。
如前所述,默認情況下,枚舉列表中的符號將被賦給整數值 0、1、2 等等。如果這不合適,則可以指定要賦給的值,如以下示例所示:
enum Department { factory = 1, sales = 2, warehouse = 4 };
請記住,如果為枚舉符號賦值,則它們必須是整數。以下賦值語句將產生錯誤:
enum Department { factory = 1.1, sales = 2.2, warehouse = 4,4 }; //錯誤
雖然沒有要求按升序排列賦給的整數值,但一般默認是這樣。
如果在賦值時省略了一個或多個符號,則它們將被賦給一個默認值,來看以下 2 個示例:
【示例 1】
enum Colors { red, orange, yellow = 9, green, blue };
在該示例中,命名常量 red 將被賦值為 0,orange 將為 1,yellow 將為 9,green 將為 10,blue 將為 11。
【示例 2】
enum Rooms { livingroom = 1, den, bedroom, kitchen };
在該示例中,livingroom 被賦值為 1,den 將為 2,bedroom 將為 3,kitchen 將為 4。
枚舉數據類型的目的之一是符號名稱有助于使程序自我解釋。但是,由于這些名稱不 是字符串,它們僅在程序中使用。在使用 Roster 數據類型的示例中,以下兩個語句將輸出 一個 2,而不是名稱 Sharon:
Roster student1 = Sharon;
cout << student1;
因為枚舉數據類型的符號名稱與整數值相關聯,所以它們可以在 switch 語句中使用,如下面的程序所示,該程序還演示了可以使用枚舉的數據類型,而不實際創建該類型的任何變量。
程序運行結果:
2
Sharon's birthday is April 22.
總結
以上是生活随笔為你收集整理的c++中的enum类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: rpm命令详细解答
- 下一篇: C++ 枚举类型详解