**
如果乙個變數你需要幾種可能存在的值,那麼就可以被定義成為列舉型別。
之所以叫列舉就是說將變數或者叫物件可能存在的情況也可以說是可能的值一一例舉出來。
舉個例子來說明一吧,為了讓大家更明白一點,比如乙個鉛筆盒中有一支筆,但在沒有開啟之前你並不知道它是什麼筆,可能是鉛筆也可能是鋼筆,這裡有兩種可能,那麼你就可以定義乙個列舉型別來表示它!
enum box;//這裡你就定義了乙個列舉型別的變數叫box,這個列舉變數內含有兩個元素也稱列舉元素在這裡是pencil和pen,分別表示鉛筆和鋼筆。
這裡要說一下,如果你想定義兩個具有同樣特性列舉型別的變數那麼你可以用如下的兩種方式進行定義!
enum box;
enum box box2;//或者簡寫成box box2;
再有一種就是在宣告的時候同時定義。
enum box,box2; //在宣告的同時進行定義!
列舉變數中的列舉元素系統是按照常量來處理的,故叫列舉常量
,他們是不能進行普通的算術賦值的,(pencil=1;)這樣的寫發是錯誤的,但是你可以在宣告的時候進行賦值操作!
enum box;
但是這裡要特別注意的一點是,如果你不進行元素賦值操作那麼元素將會被系統自動從0開始自動遞增的進行賦值操作,說到自動賦值,如果你只定義了第乙個那麼系統將對下乙個元素進行前乙個元素的值加1操作,例如
enum box;//這裡pen就是4系統將自動進行pen=4的定義賦值操作!
前面說了那麼多,下面給出乙個完整的例子大家可以通過以下的**的學習進行更完整的學習!
#include
using
namespace std;
void
main(void)
; enum egg test; //在這裡你可以簡寫成egg test;
test = c; //對列舉變數test進行賦予元素操作,這裡之所以叫賦元素操作不叫賦值操作就是為了讓大家明白列舉變數是不能直接賦予算數值的,例如(test=1;)這樣的操作都是不被編譯器所接受的,正確的方式是先進行強制型別轉換例如(test = (enum egg) 0;) 這是c風格,c++風格用 test = (egg) 0;!
if (test==c)
if (test==2)
cout
<< a << "|" << b << "|" << test <= (enum egg) 0; //強制型別轉換 test = (egg)0;
cout
<< "列舉變數test值改變為:" << test }看到這裡要最後說乙個問題,就是列舉變數中的列舉元素(或者叫列舉常量)在特殊情況下是會被自動提公升為算術型別的!
#include
using
namespace std;
void
main(void)
; int c = 1+b; //自動提公升為算術型別
cout
<< c }注意:
c++ 中的列舉型別繼承於 c 語言。就像其他從 c 語言繼承過來的很多特性一樣,c++ 列舉也有缺點,這其中最顯著的莫過於作用域問題——在列舉型別中定義的常量,屬於定義列舉的作用域,而不屬於這個列舉型別。例如下面的示例:
enum fileaccess ;
fileaccess access = ::read;
// 正確
如果這個型別宣告在class base
中,則base::read
;fileaccess access = fileaccess::read;
// 錯誤
c++列舉的這個特點對於習慣物件導向和作用域概念的人來說是不可接受的。
ps:還得好好學習c++啊。
C 列舉型別
c 中的列舉型別繼承於 c 語言。就像其他從 c 語言繼承過來的很多特性一樣,c 列舉也有缺點,這其中最顯著的莫過於作用域問題 在列舉型別中定義的常量,屬於定義列舉的作用域,而不屬於這個列舉型別。例如下面的示例 enum fileaccess fileaccess access read 正確 fi...
c 列舉型別
列舉型別是一種的值型別,它用於宣告一組命名的常數。1 列舉的宣告 列舉宣告用於宣告新的列舉型別。訪問修辭符 enum 列舉名 基礎型別 列舉由int,uint,byte,sbyte,long,ulong,short,ushort這8種基元型別構成基型別,沒有顯式地宣告基礎型別的列舉聲 明意味著所對應...
c列舉型別
在程式中,可能需要為某些整數定義乙個別名,我們可以利用預處理指令 define來完成這項工作,您的 可能是 define mon 1 define tue 2 define wed 3 define thu 4 define fri 5 define sat 6 define sun 7 在此,我們...