ค่าคงที่
ค่าคงที่ (Constant) เป็นตัวแปรประเภทหนึ่งที่ไม่สามารถเปลี่ยนแปลงค่าได้ในขณะที่โปรแกรมทำงาน นั่นหมายความว่าเราจะต้องกำหนดค่าให้ตัวแปรในเวลาที่คอมไพเลอร์ทำงาน หรือในตอนแรกที่เราสร้างตัวแปรค่าคงที่ขึ้นมา ค่าคงที่ที่เราใช้กันบ่อยๆ นั้นเรียกว่า Literal ซึ่ง Literal สามารถแบ่งแยกได้เป็น Integer, Floating-point, Characters, Strings, Boolean, Pointers และค่าคงที่ที่ผู้ใช้สร้างขึ้นเอง
Typed constant
ในการประกาศค่าคงที่ในภาษา C++ นั้นเหมือนกันกับการประกาศตัวแปร แต่สำหรับการประกาศค่าคงที่นั้นจะมีคำสั่ง const
เพิ่มเข้ามาข้างหน้า นี่เป็นรูปแบบของการประกาศค่าคงที่ในภาษา C++
const data_type identifier = value;
เราสามารถประกาศค่าคงที่โดยการตั้งชื่อและกำหนดค่าให้กับมันในตอนที่เราประกาศตัวค่าคงที่เสมอ หลังจากนั้นเราสามารถเรียกใช้ตัวแปรค่าคงที่โดยใช้ชื่อของมันได้ในโปรแกรม ชนิดของตัวแปรประเภทค่าคงที่นั้นเหมือนกับตัวแปรปกติ ซึ่งจะมี Integer, Floating-point, Characters, Strings, Boolean, Pointers มาดูตัวอย่าง
const int LENGTH= 100;
const double PI = 3.1415926;
const char N = 'a';
ในตัวอย่าง เราได้ทำการประกาศค่าคงที่สามตัว ค่าคงที่แรกชื่อว่า LENGTH
ซึ่งเป็นค่าคงแบบ int
และค่าคงที่ที่สองชื่อว่า PI
ซึ่งเป็นค่าคงแบบ float
และค่าคงที่สุดท้าย N
ซึ่งเป็นค่าคงที่แบบ char การตั้งชื่อให้กับค่าคงที่นั้นนิยมใช้ตัวพิมพ์ใหญ่ทั้งหมดและคั่นด้วยเครื่องหมาย Underscore (_) หากเป็นชื่อที่ยาว ต่อไปเป็นตัวอย่างการใช้งานค่าคงที่ในการเขียนโปรแกรมในภาษา C++
#include <iostream>
using namespace std;
int main()
{
const float PI = 3.14f;
int r1 = 3;
int r2 = 5;
int r3 = 10;
cout << "Area of circle 1 is " << (PI * r1 * r1) << endl;
cout << "Area of circle 2 is " << (PI * r2 * r2) << endl;
cout << "Area of circle 3 is " << (PI * r3 * r3) << endl;
cout << "Circumstance of circle 1 is " << (2 * PI * r1) << endl;
cout << "Circumstance of circle 2 is " << (2 * PI * r2) << endl;
cout << "Circumstance of circle 3 is " << (2 * PI * r3) << endl;
return 0;
}
ในตัวอย่าง เป็นโปรแกรมในการหาพื้นที่และเส้นรอบวงของวงกลม เรามีค่าคงที่ PI
ซึ่งเก็บค่าคงที่ทางคณิตศาสตร์ที่เป็นสัดส่วนระหว่างเส้นรอบวงและเส้นผ่านศูนย์กลางของวงกลม และเรามีตัวแปร r1
r2
และ r3
ที่เก็บรัศมีของวงกลมสามวงตามลำดับ
ในตัวอย่างคุณจะเห็นประโยชน์ของการใช้งานค่าคงที่คือ เป็นการทำให้ตัวแปรนั้นมีความหมายมากขึ้น คุณสามารถอ้างถึงค่า 3.14f
โดยการใช้ PI
แทน ซึ่งจะช่วยลดความผิดพลาดในการเขียนโปรแกรมและทำให้โปรแกรมของคุณเข้าใจง่ายมากขึ้น ซึ่งโดยทั่วไปแล้วค่าคงที่นั้นจะนิยมตั้งชื่อโดยใช้ตัวใหญ่ทั้งหมด ทำให้มันสังเกตุได้ง่ายจากตัวแปรปกติ
Area of circle 1 is 28.26
Area of circle 2 is 78.5
Area of circle 3 is 314
Circumstance of circle 1 is 18.84
Circumstance of circle 2 is 31.4
Circumstance of circle 3 is 62.8
นี่เป็นผลลัพธ์การทำงานของโปรแกรมในการใช้งานค่าคงที่ในภาษา C++ และเพื่อให้คุณเข้าใจกับการใช้งานค่าคงที่มากขึ้นมาดูตัวอย่างเพิ่มเติม กับโปรแกรมการเดินทางของยานอวกาศ
#include <iostream>
using namespace std;
int main()
{
const float SPEED = 182305.92f; // mph
cout << "Spacecraft can travel in space with average speed at " << SPEED << " mph." << endl;
cout << "How far does it move in 1 second: " << (1 * SPEED / 3600.f) << " miles." << endl;
cout << "How far does it move in 1 minute: " << (60 * SPEED / 3600.f) << " miles." << endl;
cout << "How far does it move in 1 hour: " << (3600 * SPEED / 3600.f) << " miles." << endl;
cout << "How far does it move in 1 day: " << (86400 * SPEED / 3600.f) << " miles." << endl;
cout << "How far does it move in 1 month: " << (86400 * 30 * SPEED / 3600.f) << " miles." << endl;
cout << "How far does it move in 1 year: " << (86400 * 365 * SPEED / 3600.f) << " miles." << endl;
cout << "How long does it take from the earth to the moon: " << (238855.086 / SPEED) << " hours." << endl;
cout << "How long does it take from the earth to the sun: " << (92.95713e6 / SPEED / 24) << " days." << endl;
cout << "How long does it take to travel in 1 light year: " << (5.8786e12 / SPEED / 24 / 365) << " years." << endl;
return 0;
}
ในตัวอย่าง เป็นโปรแกรมแสดงระยะทางและเวลาการเดินทางของยานอวกาศลำหนึ่งที่เดินทางด้วยความเร็วเฉลี่ยที่ 182305.92
ไมล์ต่อชั่วโมง และเราเก็บความเรานี้ไว้ในตัวแปรค่าคงที่ SPEED
ในโปรแกรมคุณจะเห็นว่าเราได้ใช้ค่าคงที่เป็นจำนวนมาก ซึ่งค่าเหล่านี้เป็นค่าที่ถูกกำหนดให้เป็นความเร็วของยาน
Spacecraft can travel in space with average speed at 182306 mph.
How far does it move in 1 second: 50.6405 miles.
How far does it move in 1 minute: 3038.43 miles.
How far does it move in 1 hour: 182306 miles.
How far does it move in 1 day: 4.37534e+006 miles.
How far does it move in 1 month: 1.3126e+008 miles.
How far does it move in 1 year: 1.597e+009 miles.
How long does it take from the earth to the moon: 1.31019 hours.
How long does it take from the earth to the sun: 21.2457 days.
How long does it take to travel in 1 light year: 3681.03 years.
นี่เป็นผลลัพธ์การทำงานของโปรแกรม
Preprocessor definitions
ในการเขียนโปรแกรมในภาษา C++ มีอีกทางหนึ่งในการประกาศค่าคงที่คือการใช้ Processor definitions โดยมีรูปแบบดังนี้
#define identifier replacement
โดยใช้คำสั่ง #define
ตามด้วยชื่อของค่าคงที่ identifier
และตามด้วยค่าของมัน replacement
ค่านี้สามารถเป็น Literal ของ Primitive datatype ใดๆ ซึ่งคำสั่งนี้จะถูกประมวลผลโดย Preprocessor และเกิดขึ้นในตอนที่โปรแกรมคอมไพล์ และมันไม่จำเป็นต้องจบด้วยเครื่องหมายเซมิโคลอน นี่เป็นตัวอย่างสำหรับการใช้วิธีนี้
#define PI 3.14159
#define NAME 'Mateo'
ตอนนี้ เราสามารถใช้ค่าคงที่ที่เราเพิ่งได้สร้าง โดยการใช้ชื่อของมัน
#include <iostream>
#define PI 3.14159
#define NAME "Mateo"
using namespace std;
int main()
{
cout << "Pi is " << PI << endl;
cout << "Name is " << NAME ;
return 0;
}
การประกาศค่าคงที่ด้วยวิธีนี้จะทำให้โปรแกรมทำงานเร็วกว่า เพราะมันเกิดขึ้นในตอนคอมไพล์ของโปรแกรม โดยคอมไพเลอร์จะทำการแทนที่ชื่ของค่าคงที่เป็นค่าที่เรากำหนดไว้ตั้งแต่ทีแรก แต่อย่างไรก็ตามมันไม่ได้มีข้อแตกต่างมากในเรื่องของความเร็ว มันมักจะใช้ควบคุมการทำงานของคอมไพลเลอร์ มาดูตัวอย่างการใช่งานเพิ่มเติม
#include <iostream>
#define SIZE 10
using namespace std;
int number[SIZE];
int main()
{
for (int i = 0; i < SIZE; i++)
{
cout << "Enter number " << (i + 1) << ": ";
cin >> number[i];
}
cout << "Numbers in array: ";
for (int i = 0; i < SIZE; i++)
{
cout << number[i] << ", ";
}
return 0;
}
ในตัวอย่าง เป็นโปรแกรมสำหรับรับตัวเลข 10
ตัวเก็บไว้ในอาเรย์ และแสดงผลตัวเลขเหล่านั้นออกมาทางหน้าจอ เราได้ประกาศค่าคงที่ในตัวแปร SIZE
เมื่อโปรแกรมทำงานคอมไพเลอร์จะทำการแทนที่ทุกที่ที่มี SIZE
เป็น 10
ซึ่งมันมีผลกับการที่คุณเขียน 10 ลงไปในโค้ดโดยตรง แต่การเขียนโดยตรงนั้นจะทำให้คุณสับสนและอาจจะเกิดความผิดพลาดได้มาก และในกรณีที่คุณต้องการเปลี่ยนขนาดของอาเรย์เป็น 20 คุณสามารถเปลี่ยนได้โดยเปลี่ยนเป็น #define SIZE 20
Enter number 1: 2
Enter number 2: 5
Enter number 3: 3
Enter number 4: 2
Enter number 5: 7
Enter number 6: 0
Enter number 7: 7
Enter number 8: 2
Enter number 9: 3
Enter number 10: 6
Numbers in array: 2, 5, 3, 2, 7, 0, 7, 2, 3, 6,
นี่เป็นผลลัพธ์การทำงานของโปรแกรม เราได้กรอกตัวเลข 10 จำนวนลงไปในอาเรย์และแสดงผลออกมา
ในบทนี้ คุณรู้จักและเรียนรู้เกี่ยวกับค่าคงที่ในภาษา C++ เราได้พูดถึงวิธีการประกาศและการใช้งานค่าคงที่ รวมทั้งคุณได้ทราบถึงประโยชน์ในการใช้งานค่าคงที่ และสถานการณ์ของการเขียนโปรแกรมที่จำเป็นต้องใช้ค่าคงที่ และเราได้พูกถึงการใช้งานค่าคงที่แบบ Preprocessor definitions