C++列舉型別Enum及C++11強列舉型別用法
阿新 • • 發佈:2018-12-06
列舉常常和switch配合使用,用一個程式碼片段來說明:
//W A S D 前、後、左、右行走\nQ E 左、右轉頭\nF 復位\nG H 暫停、繼續、重播例項\nY 停止例項\nB 刪除例項\nSPACE 刪除所有例項 enum Keydown{ Forward='w', Back='s', Left='a', Right='d', Lyaw='q', Ryaw='e', Reset = 'f', Pause = 'g', Continue = 'h', Stop = 'y', Delete = 'b', DeleteAll = 32 }key;while (true){ if (_kbhit()){//接受鍵盤迴調 key = Keydown(_getch()); switch (key){ case ('q') ://按q 朝左擺頭 { Rotate(-2.f); break; } case ('e') ://按e 朝右擺頭 { Rotate(2.f);break; } case ('w') ://按w 往前走 { Move(0.f, 0.f, -0.1f); break; } case ('a') ://按a 朝左走 { Move(-0.1f, 0.f, 0.f); break; } case('s') ://按s 往後走 { Move(0.f, 0.f, 0.1f); break; } case('d') ://按d 朝右走 { Move(0.1f, 0.f, 0.f); break; } case('f') ://按f 復位 { SetPosition(0.f, 0.f, 1.f); SetOrientation(0.f, 0.f, -1.0, 0.f, 1.f, 0.f); break; } case('r') ://按r 轉頭 { Rotate(180.f); break; } case(32) ://按space 銷燬所有例項 { DestoryAllInstance(); break; } case('b') ://按b 銷燬一個例項 { DestoryInstance(pIns1); break; } case('g') ://按g 暫停 { pIns1->Pause() ; break; } case('h') ://按h { pIns1->Continue(); break; } case('y') ://按y 停止 { pIns1->Stop(); break; } default: continue; } } }
而C++11加入了強列舉型別
C++11之前,若是同一作用域下有兩個不同的列舉型別,但含有相同的列舉常量也是不可的,比如:
enum EnumType1{Yang,Li}; enum EnumType2{Li,Zhang};
這樣是不行的。
強列舉型別用class關鍵字來宣告,如:
enum class Enumeration{ E1=10 E2=20 E3, E4,
};
強型別列舉之所以能解決在不同列舉類下同列舉值名的問題,是因為在使用強列舉型別的列舉名時,必須指明所屬範圍,比如:Enum::E1,而單獨的E1則不再具有意義。