"static const"
"static const" เป็นการรวมของ static (storage specifier) และ const (type qualifier)
static กำหนดอายุการใช้งานและการมองเห็น/เข้าถึงของตัวแปร หมายถึงถ้าตัวแปรประกาศเป็น static จะอยู่ในหน่วยความจำตลอดเวลาที่โปรแกรมทำงาน ในขณะที่ตัวแปรปกติหรือ auto จะถูกทำลายเมื่อฟังก์ชัน (ที่ตัวแปรถูกกำหนด) จบการทำงาน
const เป็น type qualifier ใช้แสดงข้อมูลเพิ่มเติมเกี่ยวกับค่าผ่านระบบชนิดข้อมูล เมื่อตัวแปรถูกเริ่มต้นด้วย const จะไม่ยอมรับการเปลี่ยนแปลงค่าได้
ดังนั้น การรวม static และ const สามารถกล่าวได้ว่า เมื่อตัวแปรเริ่มต้นด้วย static const จะเก็บค่าไว้จนกว่าโปรแกรมจะจบการทำงาน และไม่ยอมรับการเปลี่ยนแปลงค่าใดๆ
ตัวอย่าง
#include <iostream>
using namespace std;
int main() {
int input = 10;
static const int value = 5;
input += value;
cout << input;
return 0;
}
"#define"
คำสั่ง Preprocessor เรียกว่า DIRECTIVES เริ่มต้นด้วยสัญลักษณ์ # (pound/hash) ไม่ควรมีช่องว่างก่อน # และไม่ต้องการ semicolon ท้ายบรรทัด
สิ่งที่ทำได้ในขั้นตอน preprocessing ได้แก่
- Inclusion ไฟล์อื่นผ่าน #include directive
- Definition ของ symbolic constants และ macros ผ่าน #define directive
ผ่าน preprocessor directives บางอย่าง คุณยังสามารถ compile แบบเงื่อนไขได้
หมายเหตุ - ขั้นตอน preprocessing ของโปรแกรม C++ เกิดขึ้นก่อนการคอมไพล์ C++ preprocessor คือโปรแกรมที่รันก่อนที่ source code จะถูกคอมไพล์
คุณเคยเรียนรู้ #include แล้ว ตอนนี้เราจะมุ่งเน้น #define
#define preprocessor อนุญาตให้เรากำหนดชื่อและค่าคงที่เชิงสัญลักษณ์ เช่น
#define PI 3.14159
คำสั่งนี้จะแทนที่ทุกครั้งที่เจอ PI ในโปรแกรมด้วย 3.14159
ตัวอย่าง C++ #define
#include <iostream>
using namespace std;
#define PI 3.14159
int main() {
int r = 10;
float cir;
cir = PI * (r * r);
cout << "Area of Circle: " << cir << endl;
}
"enum"
enum เป็น user-defined data type ที่เราระบุชุดค่าสำหรับตัวแปร และตัวแปรสามารถรับค่าได้เพียงหนึ่งค่าจากชุดค่าที่เป็นไปได้น้อยๆ เราใช้คีย์เวิร์ด enum เพื่อกำหนด Enumeration
enum direction {East, West, North, South} dir;
ที่นี่ Enumeration ชื่อ direction รับค่าได้เพียงหนึ่งใน 4 ค่าที่ระบุ dir ที่ท้ายคือตัวแปร enum
ตัวอย่างง่ายๆ:
กำหนดค่า West ให้ enum variable dir ตอนแสดงค่า dir จะได้ 1 เพราะค่าเริ่มต้นเรียงจาก 0 คือ East=0, West=1, North=2, South=3
Input: direction {East, West, North, South} dir=West
Output: 1
ตัวอย่าง
#include <iostream>
using namespace std;
enum direction {East, West, North, South} dir;
int main() {
dir = West;
cout << dir;
return 0;
}
วิธีประกาศ enum variable อีกแบบ
#include <iostream>
using namespace std;
enum direction {East, West, North, South};
int main() {
direction dir;
dir = South;
cout << dir;
return 0;
}
ผลลัพธ์
3
ทำไมต้องใช้ enum ใน C++
ตอนนี้เราเข้าใจ enum และการใช้งานแล้ว มาพูดถึงเหตุผลที่ใช้:
Enums ใช้เมื่อเราคาดหวังว่าตัวแปรจะมีค่าเป็นหนึ่งในชุดค่าที่เป็นไปได้ เช่นตัวแปร dir ที่เก็บทิศทาง เนื่องจากมี 4 ทิศทาง ตัวแปรนี้รับค่าได้แค่ 4 ค่า ถ้าพยายามกำหนดค่าอื่นสุ่มๆ จะเกิด compile-time error เพิ่มการตรวจสอบขณะคอมไพล์และป้องกันข้อผิดพลาดจากค่าคงที่ที่ไม่ถูกต้อง
สถานที่สำคัญอีกแห่งที่ใช้บ่อยคือ switch-case statements ที่ค่าที่ case blocks คาดหวังสามารถกำหนดใน enum ได้ วิธีนี้รับรองว่า enum variable ที่ส่งเข้า switch parentheses ไม่ได้รับค่าสุ่มที่ไม่ควรจะรับ