User Tools

Site Tools


comp:enum

2.3 ชนิดแจงนับ

ชนิดแจงนับ(enumeration types) เป็นชนิดข้อมูลในภาษา C++ ที่อนุญาตให้ผู้เขียนโปรแกรมสามารถกำหนดรูปแบบของชนิดข้อมูลได้เอง โดยข้อมูลดังกล่าวจะต้องประกอบด้วยค่าที่เป็นจำนวนเต็ม ตามรูปแบบการประกาศข้อมูลที่กำหนด ดังนี้

     enum  typename {  enumerator-list  } 

โดยที่ enum เป็นคำสำคัญที่แจ้งการประกาศชนิดข้อมูล typename เป็นชื่อชนิดข้อมูลที่ผู้เขียนโปรแกรมกำหนดขึ้น และ enumerator-list เป็นชุดของค่าจำนวนเต็มที่ต้องการให้เป็นส่วนหนึ่งของชนิดข้อมูลที่ประกาศ โดยค่าจำนวนเต็มทุกตัวจะระบุโดยอ้างอิงผ่านชื่อที่ผู้เขียนเป็นคนกำหนด ชื่อแรกที่ผู้เขียนโปรแกรมกำหนดจะเก็บค่าจำนวนเต็ม 0 ชื่อถัดมาจะเก็บค่าจำนวนเต็ม 1, 2, 3, … ตามลำดับ เช่น

enum Semester { FALL, SPRING, SUMMER };

จากตัวอย่าง เป็นการประกาศชนิดข้อมูลแบบแจงนับ ชื่อ Semester โดยชนิดข้อมูลดังกล่าวจะประกอบด้วยค่าจำนวนเต็ม 3 ค่า คือ FALL, SPRING และ SUMMER ซึ่งเก็บค่าจำนวนเต็ม 0, 1 และ 2 ตามลำดับ

เมื่อประกาศชนิดข้อมูลแล้ว ผู้เขียนโปรแกรมสามารถประกาศตัวแปรเพื่อใช้งานได้ เช่นเดียวกับการประกาศตัวแปรในภาษา C++ ทั่วไป เช่น

Semester s1, s2;

เป็นการประกาศตัวแปร 2 ตัว ชื่อ s1 และ s2 โดยให้ตัวแปรทั้งสองตัวเก็บข้อมูลชนิด Semester

การใช้งานและการกำหนดค่าให้กับตัวแปรก็สามารถทำได้ เช่นเดียวกับการกำหนดค่าให้กับตัวแปรในตัวอย่างที่ผ่านมา เช่น

s1 = SPRING;
s2 = SUMMER;

เป็นคำสั่งการกำหนดค่าให้กับตัวแปร s1 และ s2 มีผลให้ตัวแปร s1 มีค่าเป็น SPRING ซี่งก็คือ ค่าจำนวนเต็ม 1 ส่วนตัวแปร s2 จะมีค่าเป็น SUMMER ซี่งก็คือ ค่าจำนวนเต็ม 2 นั่นเอง

ในกรณีที่ผู้เขียนโปรแกรมต้องการเป็นผู้กำหนดค่าเริ่มให้กับชนิดข้อมูล (ไม่ต้องการให้มีค่าเริ่มต้นเป็นจำนวนเต็ม 0) ก็สามารถทำได้ ดังตัวอย่าง

enum Month { JAN = 1, FEB , MAR , APR , MAY , JUN , JUL , AUG ,  
             SEP , OCT , NOV , DEC };

หรือ ถ้าผู้เขียนโปรแกรมต้องการกำหนดค่าให้กับชื่อแต่ละชื่อ ก็สามารถทำได้เช่นกัน ดังตัวอย่าง

enum Coin { PENNY = 1, NICKEL = 5 , DIME = 10 , QUARTER = 25 }; 

ข้อพึงระวังในการประกาศชนิดข้อมูลแบบแจงนับ คือ ผู้เขียนโปรแกรมต้องไม่กำหนดกำหนดค่าจำนวนเต็มที่ซ้ำกันให้กับชื่อข้อมูล เช่น

enum Answer { NO = 0, FALSE = 0, YES = 1, TRUE = 1 }; // Wrong 

ผู้เขียนโปรแกรมต้องตั้งชื่อให้กับข้อมูลตามกฎการตั้งชื่อของภาษา C++ มาตรฐานเท่านั้น เช่น

 enum Grade { F, D, C-, C, C+, B-, B, B+, A-, A }; //  Wrong 

เป็นการประกาศที่ผิด เนื่องจาก ภาษา C++ ไม่ยอมให้ใช้เครื่องหมาย + หรือ – ในชื่อวัตถุ

ในการเขียนโปรแกรม มีหลักการใช้อักษรตัวพิมพ์ใหญ่และตัวพิมพ์เล็กในการตั้งชื่อ ที่ผู้เขียนโปรแกรมส่วนใหญ่นิยมปฏิบัติ คือ

  1. ใช้ตัวอักษรพิมพ์ใหญ่กับชื่อตัวคงที่
  2. เริ่มต้นด้วยตัวอักษรพิมพ์ใหญ่แล้วตามด้วยตัวอักษรพิมพ์เล็กกับชื่อชนิดข้อมูลที่ผู้ใช้ประกาศ
  3. ส่วนชื่ออื่นๆ เช่น ชื่อตัวแปร และ ชื่อฟังก์ชัน จะใช้ตัวอักษรพิมพ์เล็ก
comp/enum.txt · Last modified: 2020/06/13 13:55 by wasu

Page Tools