php枚舉類型enum用法,php 枚舉

本文目錄一覽:

枚舉類型enum用法

enum是用來聲明枚舉類型數據。

它可以像數組一樣存儲許多的元素,但是不同於數組的是,它除了數字不能存儲以外,其他類型的如字母、特殊符號、漢字都可以以任意組合存入enum當中去。

enum的聲明:enum A { a, b, c };

enum聲明不同於數組,其只可以聲明在Main()方法體外,在Main()中可以被調用。

enum的枚舉數值默認是從0開始的,但是也可以強制元素序列進行改變。enum A {a=1, b, c};這樣就可以實現了。

enum可以通過枚舉名加點通過枚舉的元素訪問枚舉數值。例:

int i = (int)A.a;枚舉值雖然是int類型的,但是也必須進行顯示的強制轉換。

同樣enum也可以通過枚舉數值來訪問枚舉內的各個元素。方法是:Console.WriteLine( ” (A)1 ” );這樣就可以訪問enum內的各個元素。

enum怎麼用?

一個enum是定義一組值的對象,它可以包括零個或多個值成員。只須定義一個enum型的對象.enum對象的值都會自動獲得一個數字值,從0開始,依次遞增。如:

EnumDemo.java

package net.javagarage.enums;

public class EnumDemo{

private enum Seasons{

winter,spring,summer,fall

public static void main(String[]args){

for(Seasons s:Seasons.values()){

System.out.println(s);

儘管enums有這麼多的屬性,但並不是用的越多越好,如果那樣還不如直接用類來的直接.enums的優勢在定義int最終變數僅當這些值有一定特殊含義時.但是如果需要的是一個類,就定義一個類,而不是enum。

擴展資料:

枚舉值是常量,不是變數。不能在程序中用賦值語句再對它賦值。枚舉元素本身由系統定義了一個表示序號的數值,從0開始順序定義為0,1,2…。如在weekday中,sun值為0,mon值為1,sat值為6。

只能把枚舉值賦予枚舉變數,不能把元素的數值直接賦予枚舉變數。如一定要把數值賦予枚舉變數,則必須用強制類型轉換。

ENUM的賦值和使用

枚舉類型在使用中有以下規定:

1. 枚舉值是常量,不是變數。不能在程序中用賦值語句再對它賦值。

2. 枚舉元素本身由系統定義了一個表示序號的數值,從0開始順序定義為0,1,2…。如在weekday中,sun值為0,mon值為1,sat值為6。

只能把枚舉值賦予枚舉變數,不能把元素的數值直接賦予枚舉變數。如一定要把數值賦予枚舉變數,則必須用強制類型轉換。

如: a=(enum weekday)2;特別注意:在VS2010等編譯器中,強制轉換格式應為:(weekday)2,如果前面加上了enum,編譯時會出現「類型重定義」的錯誤。

其意義是將順序號為2的枚舉元素賦予枚舉變數a,相當於: a=tue;還應該說明的是枚舉元素不是字元常量也不是字元串常量,使用時不要加單、雙引號。 輸出結果:1 monday 2 tuesday 3 wendsday 4 thursday 5 friday6 saturday 7 sunday 8 monday 9 tuesday 10 wendsday11 thursday 12 friday 13 saturday 14 sunday 15 monday16 tuesday 17 wendsday 18 thursday 19 friday 20 saturday21 sunday 22 monday 23 tuesday 24 wendsday 25 thursday26 friday 27 saturday 28 sunday 29 monday 30 tuesday3. 如果枚舉值與一些關鍵字衝突,例如: enum course{begin,then,end};由於程序有可能使用了iostream,並且使用了命名空間std,這時如果直接使用end進行賦值就有可能出現「不明確」符號的錯誤。解決此問題,有兩個方法:

(1)定義枚舉值時應避免使用常用關鍵字,可以加前綴進行區分

例如: enum course{e_begin,e_then,e_end};(2)可以在枚舉值前面加入枚舉類型:course::end

枚舉類型的用法?

C/C++中枚舉類型(enum)

如果一個變數你需要幾種可能存在的值,那麼就可以被定義成為枚舉類型。之所以叫枚舉就是說將變數或者叫對象可能存在的情況也可以說是可能的值一一例舉出來。 舉個例子來說明一吧,為了讓大家更明白一點,比如一個鉛筆合中有一支筆,但在沒有打開之前你並不知道它是什麼筆,可能是鉛筆也可能是鋼筆,這裡有兩種可能,那麼你就可以定義一個枚舉類型來表示它! enum box{pencil,pen};//這裡你就定義了一個枚舉類型的變數叫box,這個枚舉變數內含有兩個元素也稱枚舉元素在這裡是pencil和pen,分別表示鉛筆和鋼筆。

在這裡要說一下,如果你想定義兩個具有同樣特性枚舉類型的變數那麼你可以用如下的兩種方式進行定義! enum box{pencil,pen}; enum box box2;//或者簡寫成box box2;

再有一種就是在聲明的時候同時定義。 enum {pencil,pen}box,box2; //在聲明的同時進行定義!

枚舉變數中的枚舉元素系統是按照常量來處理的,故叫枚舉常量,他們是不能進行普通的算術賦值的,(pencil=1;)這樣的寫發是錯誤的,但是你可以在聲明的時候進行賦值操作! enum box{pencil=1,pen=2};

但是這裡要特別注意的一點是,如果你不進行元素賦值操作那麼元素將會被系統自動從0開始自動遞增的進行賦值操作,說到自動賦值,如果你只定義了第一個那麼系統將對下一個元素進行前一個元素的值加1操作,例如 enum box{pencil=3,pen};//這裡pen就是4系統將自動進行pen=4的定義賦值操作!

C++ 中的枚舉類型繼承於 C 語言。就像其他從 C 語言繼承過來的很多特性一樣,C++ 枚舉也有缺點,這其中最顯著的莫過於作用域問題——在枚舉類型中定義的常量,屬於定義枚舉的作用域,而不屬於這個枚舉類型。例如下面的示例:enum FileAccess {

Read = 0x1,

Write = 0x2,

};FileAccess access = ::Read; // 正確

FileAccess access = FileAccess::Read; // 錯誤C++枚舉的這個特點對於習慣面向對象和作用域概念的人來說是不可接受的。首先,FileAccess::Read 顯然更加符合程序員的直覺,因為上面的枚舉定義理應等價於如下的定義(實際上,.NET 中的枚舉類型便是如此實現的):class FileAccess {

static const int Read = 0x1;

static const int Write = 0x2;

};其次,這導致我們無法在同一個作用域中定義兩個同樣名稱的枚舉值。也就是說,以下的代碼是編譯錯誤:enum FileAccess {

Read = 0x1,

Write = 0x2,

};enum FileShare {

Read = 0x1, // 重定義

Write = 0x2, // 重定義

};如果這一點沒有讓你惱怒過的話,你可能還沒寫過多少 C++ 代碼 :-)。實際上,在最新的 C++0x 標準草案中有關於枚舉作用域問題的提案,但最終的解決方案會是怎樣的就無法未卜先知了,畢竟對於象 C++ 這樣使用廣泛的語言來說,任何特性的增刪和修改都必須十分小心謹慎。當然,我們可以使用一些迂迴的方法來解決這個問題(C++ 總是能給我們很多驚喜和意外)。例如,我們可以把枚舉值放在一個結構里,並使用運算符重載來逼近枚舉的特性:struct FileAccess {

enum __Enum {

Read = 0x1,

Write = 0x2

};

__Enum _value; // 枚舉值 FileAccess(int value = 0) : _value((__Enum)value) {}

FileAccess operator=(int value) {

this-_value = (__Enum)value;

return *this;

}

operator int() const {

return this-_value;

}

};我們現在可以按照希望的方式使用這個枚舉類型:FileAccess access = FileAccess::Read;並且,因為我們提供了到 int 類型的轉換運算符,因此在需要 int 的地方都可以使用它,例如 switch 語句:switch (access) {

case FileAccess::Read:

break;

case FileAccess::Write:

break;

}當然我們不願意每次都手工編寫這樣的結構。通過使用宏,我們可以很容易做到這一點:#define DECLARE_ENUM(E) \

struct E \

{ \

public: \

E(int value = 0) : _value((__Enum)value) { \

} \

E operator=(int value) { \

this-_value = (__Enum)value; \

return *this; \

} \

operator int() const { \

return this-_value; \

} \

\

enum __Enum {#define END_ENUM() \

}; \

\

private: \

__Enum _value; \

};我們現在可以按如下的方式定義前面的枚舉,並且不比直接寫 enum 複雜多少。DECLARE_ENUM(FileAccess)

Read = 0x1,

Write = 0x2,

END_ENUM()DECLARE_ENUM(FileShare)

Read = 0x1,

Write = 0x2,

END_ENUM()

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/194593.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-02 14:39
下一篇 2024-12-02 14:39

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • int類型變數的細節與注意事項

    本文將從 int 類型變數的定義、聲明、初始化、範圍、運算和類型轉換等方面,對 int 類型變數進行詳細闡述和講解,幫助讀者更好地掌握和應用 int 變數。 一、定義與聲明 int…

    編程 2025-04-29
  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變數時顯示的指定變數類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

    編程 2025-04-29
  • Python基本數字類型

    本文將介紹Python中基本數字類型,包括整型、布爾型、浮點型、複數型,並提供相應的代碼示例以便讀者更好的理解。 一、整型 整型即整數類型,Python中的整型沒有大小限制,所以可…

    編程 2025-04-29
  • c# enum轉換成string

    本文將從以下幾個方面詳細闡述c#中enum類型轉換成string類型的方法及注意事項。 一、基本語法和示例 c#中的enum類型可以看作是一組有名字的常量值,通常用於定義一組相關的…

    編程 2025-04-29
  • Python中的Bool類型判斷

    本篇文章旨在講解Python中的Bool類型判斷。在Python中,Bool類型是經常使用的一種類型,因此掌握其用法非常重要。 一、True和False 在Python中,True…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • Python函數類型有哪些

    本文將從以下幾個方面詳細闡述Python函數類型。 一、內置函數 Python的內置函數是指在Python編程語言中提供的可以直接使用的函數,不需要通過導入模塊等方式引入。 部分常…

    編程 2025-04-29
  • Python變數類型用法介紹

    Python是一種解釋型編程語言,它提供了豐富的數據類型,包括數字、字元串、列表、元組、集合、字典等。Python變數類型的定義是Python程序開發的基礎,本文將從以下幾個方面對…

    編程 2025-04-28
  • Python中的整數類型int類總覽

    本文將從多個方面,對Python中的整數類型int類進行全面介紹和闡述。 一、數據類型及基本操作 在Python中,整數類型的數據類型為int。在Python3.x中,整數類型的范…

    編程 2025-04-28

發表回復

登錄後才能評論