ชนิดแจงนับ(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++ ไม่ยอมให้ใช้เครื่องหมาย + หรือ – ในชื่อวัตถุ
ในการเขียนโปรแกรม มีหลักการใช้อักษรตัวพิมพ์ใหญ่และตัวพิมพ์เล็กในการตั้งชื่อ ที่ผู้เขียนโปรแกรมส่วนใหญ่นิยมปฏิบัติ คือ