C++列舉型別用法總結(列舉字元常量代替常量)
C++列舉型別enum表示列舉,通常用於定義個新型別的字元常量,比如enum {January,February,March}。列舉型別的作用域一般是整個檔案或者類內。當列舉型別定義在檔案開頭時,則作用域是從定義位置開始往後(不包括函式內定義);當列舉型別在類內定義時,則作用域為整個類內。在類內的標頭檔案定義和初始化列舉型別,當例項這個類的物件時,列舉型別不會佔用空間,只是包含一個字元常量而已。
列舉型別的定義可以在整個資料夾,也可以在類內。當在整個資料夾時,所有列舉量不能有相同的。當在類內時,不同類的列舉常量可以相同,不影響。下面給出具體程式碼示例。
一、列舉型別定義在類內(用的是vs2013 IDE)
1.1新建一個控制檯應用程式,然後在EnumTest.h,EnumTest.cpp,main.cpp中新增如下程式碼
EnumTest.h
#pragma once typedef unsigned long Item; class CEnumTest { public: CEnumTest(); ~CEnumTest(); const void show() const; //後面的const表示該函式不可更改類物件,也即是不能更改類物件的成員變數 private: enum {One=1,Two=2,Three=3}; Item item[Three]; };
EnumTest.cpp
#include "EnumTest.h" #include <iostream> CEnumTest::CEnumTest() { } const void CEnumTest::show() const { std::cout <<"this->Three=="<<this->Three<<std::endl; } CEnumTest::~CEnumTest() { }
main.cpp
#include <iostream> #include "EnumTest.h" int main() { CEnumTest *enumTest = new CEnumTest(); enumTest->show(); system("pause"); return true; }
1.2輸出結果如下
1.3總結
可以在類內用列舉定義多組字元常量,這些字元常量在類的標頭檔案中申明和賦值;雖然這些字元常量被賦值了,但是卻還是一個字元常量,而不是一個數值,一般列舉字元常量跟switch搭配使用。假如這些列舉字元常量被賦值給整形或者浮點型,則C++11新標準會自動轉換為對應型別,編譯器預設是用整形常量表示一個列舉型別字元常量的。
二、列舉類定義
列舉類的作用域同樣是在定義的類內,但是枚列舉類是專門為列舉建立的類,也就是說,只能用於列舉。
2.1宣告程式碼如下
enum class Data1{ First = 1,Second = 2,Third = 3 }; enum class Data2{ First = 7,Second = 8,Fourth = 9 };
2.2呼叫程式碼如下
#include <iostream> #include "EnumTest.h" enum class Data1{ First = 1,Fourth = 9 }; int main() { CEnumTest *enumTest = new CEnumTest(); enumTest->show(); /*列舉類*/ std::cout << "(int)Data1::First==" << (int)Data1::First << std::endl; //列舉類Data1可以直接用作用域解析運算子::呼叫對應列舉成員常量Data1::First std::cout << "(int)Data2::First==" << (int)Data2::First << std::endl; //列舉類Data2可以直接用作用域解析運算子::呼叫對應列舉成員常量Data2::First system("pause"); return true; }
2.3輸出結果如下
2.4總結
由上面結果可知,列舉類定義後,可以直接用作用域解析運算子::直接呼叫對應列舉類的成員常量Data1::First,可以當成一個常量來呼叫。
以前C語言列舉的常規呼叫就是在列舉類中去掉class就可以了,即下面程式碼
enum Data1{ First = 1,Third = 3 };
其它用法跟上面兩個基本一樣,就不介紹了。
參考內容:
《C++ Primer Plus》(第6版)中文版 372-373頁
以上就是C++列舉型別用法總結(列舉字元常量代替常量)的詳細內容,更多關於C++ 列舉的資料請關注我們其它相關文章!