Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

คง const เทียบกับ #define เทียบกับ enum ?


"ค่าคงที่"

“const คงที่” โดยพื้นฐานแล้วเป็นการรวมกันของสแตติก (ตัวระบุที่เก็บข้อมูล) และ const (ตัวระบุประเภท)

สแตติกกำหนดอายุการใช้งานและการมองเห็น/การเข้าถึงของตัวแปร ซึ่งหมายความว่าหากมีการประกาศตัวแปรเป็นตัวแปรคงที่ ตัวแปรนั้นจะยังคงอยู่ในหน่วยความจำตลอดเวลาเมื่อโปรแกรมกำลังทำงาน ในขณะที่ตัวแปรปกติหรือตัวแปรอัตโนมัติจะถูกทำลายเมื่อฟังก์ชัน (ซึ่งกำหนดตัวแปรถูกกำหนดไว้) สิ้นสุดลง

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

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

ตัวอย่าง

#include<iostream>
using namespace std;
int main(){
int input = 10;
static const int value = 5;
input += value;
cout << input;
return 0;
}

"#define"

คำสั่งตัวประมวลผลล่วงหน้าเรียกว่า DIRECTIVES และเริ่มต้นด้วยสัญลักษณ์ปอนด์หรือแฮช (#) ไม่ควรมีช่องว่างก่อนเครื่องหมาย # และไม่จำเป็นต้องใช้เครื่องหมายอัฒภาคต่อท้าย

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

  • รวมไฟล์อื่นๆ ผ่าน #include directive

  • คำจำกัดความของค่าคงที่สัญลักษณ์และมาโครผ่าน #define directive

คุณยังสามารถคอมไพล์ตามเงื่อนไขหรือดำเนินการคำสั่งพรีโปรเซสเซอร์บางตัวผ่านคำสั่งตัวประมวลผลล่วงหน้าบางตัวได้

หมายเหตุ - ขั้นตอนก่อนการประมวลผลของโปรแกรม C++ เกิดขึ้นก่อนที่จะคอมไพล์โปรแกรม ตัวประมวลผลล่วงหน้า C++ คือโปรแกรมที่ทำงานก่อนที่จะคอมไพล์ซอร์สโค้ด

คุณได้เรียนรู้ที่จะทำงานกับ #include preprocessor directive ที่ให้คุณรวมไฟล์ส่วนหัวที่ต้องการไว้ในโปรแกรมของคุณแล้ว การสนทนานี้หรือของเรามีขึ้นเพื่อ #define คำสั่งตัวประมวลผลล่วงหน้า

ตัวประมวลผลล่วงหน้า #define ช่วยให้เราสามารถกำหนดชื่อสัญลักษณ์และค่าคงที่ได้ ตัวอย่างเช่น

#define PI 3.14159

คำสั่งนี้จะแปล PI ทุกรายการในโปรแกรมเป็น 3.14159

C++ #define ตัวอย่าง

ตอนนี้ให้พิจารณาตัวอย่างที่สมบูรณ์ซึ่งทุกๆ การเกิดขึ้นของ PI จะแทนที่ด้วยค่า 3.14159 ซึ่งเป็นค่าที่กำหนดด้วย #define directive

Input: PI 3.14159
Output: Area of Circle 314.15

ตัวอย่าง

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

enum direction {East, West, North, South}dir;

ในที่นี้ ชื่อการแจงนับคือทิศทางที่รับค่าที่ระบุได้เพียงหนึ่งในสี่ค่า dir ที่ส่วนท้ายของการประกาศเป็นตัวแปร enum

มาดูตัวอย่างง่ายๆ เพื่อทำความเข้าใจสิ่งนี้:

ที่นี่ฉันได้กำหนดค่า West ให้กับตัวแปร enum dir และเมื่อฉันแสดงค่าของ dir มันจะแสดง 1 เนื่องจากโดยค่าเริ่มต้นค่าต่างๆ จะเรียงลำดับเพิ่มขึ้นโดยเริ่มจาก 0 ซึ่งหมายความว่า East คือ 0, West คือ 1 ทิศเหนือ คือ 2 และทิศใต้คือ 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

ดังที่เราได้เห็นในตัวอย่างข้างต้นที่ฉันได้ประกาศตัวแปร enum dir ในระหว่างการประกาศ enum มีอีกวิธีหนึ่งในการประกาศตัวแปร enum

ตัวอย่าง

#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 คืออะไรและจะใช้อย่างไรในโปรแกรม เรามาพูดคุยกันว่าทำไมเราจึงใช้:

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

สถานที่สำคัญอีกแห่งที่ใช้บ่อยคือคำสั่ง switch case ซึ่งค่าทั้งหมดที่ case block คาดหวังสามารถกำหนดได้ใน enum ด้วยวิธีนี้ เราจึงมั่นใจได้ว่าตัวแปร enum ที่เราส่งผ่านในวงเล็บสวิตช์จะไม่รับค่าสุ่มใดๆ ที่ไม่ควรยอมรับ