C++中的枚舉enum類型使用示例詳解
一.什么是枚舉enum(WHAT)
枚舉(enumeration)和類相似,能夠定義一種新的數(shù)據(jù)類型,不同的是,枚舉是將一組整形常量組織在一起,所以和類的使用方法有一些類似之處。
二.使用枚舉enum的場景(WHEN and WHERE)
實際中經(jīng)常使用枚舉來做數(shù)據(jù)的標識,可以實現(xiàn)對數(shù)據(jù)的分類,打個比方類似于用Ture和False區(qū)分是與非,而枚舉也可以在此基礎上也用整形常量的方式對數(shù)據(jù)進行更多的分類。
三.如何使用枚舉enum(HOW)
1)枚舉的定義
1.不限定作用域的枚舉
enum color
{
RED,
GREEN,
BLUE
};2.限定作用域的枚舉
在enum后面加關鍵字class或者struct
enum class color
{
RED,
GREEN,
BLUE
};3.二者區(qū)別
解決枚舉值重名的問題,保持代碼的可讀性
//定義兩種枚舉
enum class color_inner
{
RED,
GREEN,
BLUE
};
enum color_out
{
RED,
GREEN,
BLUE
};
//聲明并賦值
color_out backColor = RED; //正確
color_inner forntColor = RED; //錯誤,默認使用了out中的RED,沒有指定作用域
color_out backColor = color_out::RED; //正確,out也可以顯示指定作用域
color_inner forntColor = color_inner::RED; //正確,inner必須指定作用域2)枚舉的初始化
1.默認情況下,枚舉值從0開始,依次加1
enum color
{
RED, //默認是0
GREEN, //默認是1
BLUE //默認是2
};2.手動指定枚舉值
a.可以全部指定
enum color
{
RED=1,
GREEN=5,
BLUE=7
};b.可以部分指定,未被初始化的枚舉值的值默認將比其前面的枚舉值大1
enum color
{
RED=2,
GREEN, //默認值是3,比前一個多1
BLUE=7
};c.可以重復指定
enum color
{
RED=8,
GREEN=5,
BLUE=8 //重復指定
};3)指定枚舉類型
C++11中,還可以指定給枚舉類型賦值的整數(shù)類型,在enum的名字后面加上冒號以及指定的類型,限定作用域枚舉默認為32位整形,在某些情況下,甚至沒必要用到32位,為了節(jié)省開銷,甚至可以用8位整形unsigned char,將類型指定成后,枚舉變量變成了8位整型,減少了內(nèi)存使用。不限定作用域的枚舉類型,其成員不存在默認類型,只需要知道潛在類型是足夠大的,肯定能容納枚舉值就行。
需要注意的是,不能指定為float或者double等類型,因為枚舉量必須是一個整數(shù),float和double都不是整數(shù)。
enum color:unsigned long
{
RED=1,
GREEN=5,
BLUE=7
};4)聲明枚舉對象
a.先聲明變量,再對變量賦值
#include <iostream>
using namespace std;
int main()
{
enum color
{
RED,
GREEN,
BLUE
};
enum color backColor, frontColor, innerColor;
backColor = RED;
frontColor = GREEN;
innerColor = BLUE;
cout << backColor << "--" << frontColor << "--" << innerColor << endl;
system("pause");
return 0;
}b.聲明變量的同時賦初值
#include <iostream>
using namespace std;
int main()
{
enum color
{
RED,
GREEN,
BLUE
};
enum color backColor = RED, frontColor = GREEN, innerColor = BLUE;
cout << backColor << "--" << frontColor << "--" << innerColor << endl;
system("pause");
return 0;
}c.定義類型的同時聲明變量,然后對變量賦值
#include <iostream>
using namespace std;
int main()
{
enum color
{
RED,
GREEN,
BLUE
}backColor, frontColor, innerColor;
backColor = RED;
frontColor = GREEN;
innerColor = BLUE;
cout << backColor << "--" << frontColor << "--" << innerColor << endl;
system("pause");
return 0;
}d.類型定義,變量聲明,賦初值同時進行
#include <iostream>
using namespace std;
int main()
{
enum color
{
RED,
GREEN,
BLUE
}backColor = RED, frontColor = GREEN, innerColor = BLUE;
cout << backColor << "--" << frontColor << "--" << innerColor << endl;
system("pause");
return 0;
}5)枚舉對象賦值問題
a.不能將非枚舉量賦給枚舉變量,能將枚舉量賦給非枚舉變量,因為枚舉量是符號常量,編譯器會自動把枚舉量轉換為int類型
int a; a=RED;
b.枚舉變量不能進行算術運算,對于枚舉,只定義了賦值運算符,沒有為枚舉定義算術運算,錯誤的算數(shù)計算會導致范圍超限問題
RED++; //錯誤 RED=GREEN+BLUE; //錯誤
c.賦值超限問題
backColor = color(2); //等同于backColor = BLUE; backColor = color(10); //錯誤,超過color元素上限
6)枚舉的取值范圍
上限:需要知道枚舉量的最大值。找到大于這個最大值的、最小的2的冪,將它減去1,得到的便是取值范圍的上限
enum color:unsigned long
{
RED=1,
GREEN=5,
BLUE=7 //上限是8-1=7
};
backColor = color(7); //所以可以取到7下限:枚舉量的最小值不小于0,則枚舉下限取0;枚舉量的最小值小于0,則枚舉下限是 小于最小枚舉量的 最大的2的冪,加上1。
enum color:unsigned long
{
RED=-1,
GREEN=-5,
BLUE=-7 //下限是-8+1=-7
};
backColor = color(-7); //所以可以取到-7四.枚舉enum的應用
1.常和Switch搭配使用
enum color{RED, GREEN, BLUE}backColor=RED;
switch (backColor)
{
case RED:{...;break;}
case GREEN:{...;break;}
case BLUE:{...;break;}
default:break;
}2.if...else搭配使用
enum color{RED, GREEN, BLUE};
color backColor=RED;
void SetColor(color color)
{
backColor = color ;
}
if(backColor==RED)
{
cout<<"color is RED"<<endl;
}
else if(backColor==GREEN)
{
cout<<"color is GREEN"<<endl;
}
else if(backColor==BLUE)
{
cout<<"color is BLUE"<<endl;
}
else
{
cout<<"color is OTHER"<<endl;
}到此這篇關于C++中的枚舉enum類型使用示例詳解的文章就介紹到這了,更多相關C++ 枚舉enum類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C++實現(xiàn)LeetCode(122.買股票的最佳時間之二)
這篇文章主要介紹了C++實現(xiàn)LeetCode(122.買股票的最佳時間之二),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-07-07
基于MATLAB神經(jīng)網(wǎng)絡圖像識別的高識別率代碼
今天小編就為大家分享一篇關于基于MATLAB神經(jīng)網(wǎng)絡圖像識別的高識別率代碼,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03

