การใช้และการเริ่มต้นสมาชิกข้อมูลคงที่
เรารู้แนวคิดของค่าคงที่อยู่แล้วเมื่อเราเรียนรู้ภาษา C คีย์เวิร์ดคือ const ที่เรียกว่า "ค่าคงที่" หรือตัวแปรที่แก้ไขด้วย "ค่าคงที่" ไม่สามารถเปลี่ยนแปลงได้ ตัวอย่างเช่น ตัวแปรที่ถูกแก้ไขด้วย const จะกลายเป็นตัวแปรค่าคงที่ ค่านี้ไม่สามารถเปลี่ยนแปลงได้
ใน C++ ยังมีแนวคิดเรื่องค่าคงที่ ข้อแตกต่างเพิ่มเติมคือ นอกเหนือจากการแก้ไขตัวแปรทั่วไปให้เป็นตัวแปรคงที่แล้ว const ยังสามารถใช้เพื่อแก้ไขวัตถุและเปลี่ยนให้เป็นวัตถุคงที่ได้อีกด้วย และสมาชิกข้อมูลและฟังก์ชันสมาชิกที่สามารถแก้ไขคลาสได้เรียกว่าสมาชิกข้อมูลคงที่และฟังก์ชันสมาชิกคงที่ของคลาสตามลำดับ
ต่อไป เราจะอธิบาย สมาชิกข้อมูลคงที่ ฟังก์ชันสมาชิกคงที่ และ วัตถุคงที่ ตามลำดับ
1. สมาชิกข้อมูลคงที่:
การใช้งานสมาชิกข้อมูลคงที่จะเหมือนกับการใช้งานของเราในภาษา C ยกเว้นว่าข้อมูลส่วนนี้จะปรากฏในคลาสและรูปแบบที่ใช้จะเป็นดังนี้:
ชนิดข้อมูลชื่อสมาชิกข้อมูล const;
หรือ
ชื่อสมาชิกข้อมูลชนิดข้อมูล const;
สมาชิกที่แก้ไขโดย const จะต้องเตรียมใช้งานและไม่สามารถเปลี่ยนแปลงได้ และวิธีการเตรียมใช้งานจะดำเนินการในรายการการกำหนดค่าเริ่มต้นของตัวสร้างคลาส
นอกจากนี้ มีกรณีพิเศษ หากสมาชิกเป็นประเภทคงที่ นั่นคือ สมาชิกข้อมูลคงที่คง ที่ เนื่องจากเป็นแอตทริบิวต์คงที่ การกำหนดค่าเริ่มต้นจึงต้องเริ่มต้นภายนอกคลาส เรามาใส่สถานการณ์ที่กล่าวถึงไปในโค้ดเพื่อแสดงให้เห็น:
#include<iostream>usingnamespacestd;classClock{private:constinth;//แก้ไข h เป็นสมาชิกประเภทคงที่ constintm;//แก้ไข m เป็นสมาชิกประเภทคงที่ intconsts;//ทั้งสองการใช้งานข้างต้นสามารถใช้ได้ staticconstintx;public:Clock (inta, intb,intc):h(a),m(b),s(c){cout<<Constrctor!Called<<endl;}intShowTime(){cout<<h<<:<<m<< :<< s<<endl;return0;}intGetX(){cout<<x<<endl;return0;}};constintClock::x=99;intmain(){ClockA(12,10,30);A. ShowTime() ;A.GetX();return0;}
เรียกใช้ผลการสาธิต:
โปรดให้ความสนใจกับสมาชิกข้อมูลคงที่สี่ตัวในชั้นเรียน ในหมู่พวกเขา X เป็นประเภทคงที่ เนื่องจากคุณสมบัติพิเศษแบบคงที่จึงจำเป็นต้องเริ่มต้นนอกชั้นเรียน แม้ว่า X จะเป็นประเภทส่วนตัวก็ตาม!
2. วัตถุคงที่:
ในภาษา C++ สามารถประกาศอ็อบเจ็กต์เป็นประเภท const ได้ ซึ่งก็คืออ็อบเจ็กต์คงที่ หลังจากการประกาศนี้ วัตถุไม่สามารถเปลี่ยนแปลงได้ตลอดวงจรชีวิตทั้งหมด ดังนั้น จะต้องเริ่มต้นโดยตัวสร้างเมื่อกำหนด รูปแบบคำจำกัดความจะเป็นดังนี้:
พิมพ์ชื่อวัตถุ const;
หรือ
ชื่อวัตถุประเภท const;
ควรสังเกตว่าวัตถุคงที่ไม่สามารถเข้าถึงฟังก์ชันที่ไม่ใช่สมาชิกในคลาสได้ แต่สามารถเข้าถึงได้เฉพาะฟังก์ชันสมาชิกคงที่เท่านั้น (ส่วนที่ 3 ด้านล่าง) ลองดูตัวอย่างด้านล่าง:
#include<iostream>usingnamespacestd;classClock{private:constinth;//แก้ไข h ให้เป็นสมาชิกประเภทคงที่ constintm;//แก้ไข m ให้เป็นสมาชิกประเภทคงที่ intconsts;//ทั้งสองวิธีข้างต้นเป็นไปได้ intx;public: นาฬิกา(inta, intb,intc):h(a),m(b),s(c){x=99;cout<<Constrctor!Called<<endl;}intShowTime(){cout<<h<<: <<m< <:<<s<<endl;return0;}intGetX()const{//x=99;cout<<x<<endl;return0;}};intmain(){constClockA(12,10, 30);constClockB (14,20,50);//A=B;//A.ShowTime();A.GetX();return0;}
ให้ความสนใจกับคำสั่งในบรรทัดที่ 39 และ 40 ในโค้ด การคอมไพล์ปกติจะรายงานข้อผิดพลาดเนื่องจาก A เป็นวัตถุคงที่และไม่สามารถกำหนดค่าได้ และฟังก์ชัน ShowTime เป็นฟังก์ชันที่ไม่ใช่สมาชิก สามารถรันโค้ดได้ 41 บรรทัด และเอฟเฟกต์จะเป็นดังนี้:
3. ฟังก์ชั่นสมาชิกคงที่:
ในทำนองเดียวกัน หลังจากที่ฟังก์ชันสมาชิกในคลาสถูกแก้ไขโดย const ก็จะกลายเป็นฟังก์ชันสมาชิกคงที่ คำจำกัดความของฟังก์ชันสมาชิกคงที่จะเป็นดังนี้:
ชื่อฟังก์ชันชนิดส่งคืน (คอลัมน์รายการพารามิเตอร์) const;
ต้องใส่ใจกับ:
(1) คำจำกัดความและการประกาศฟังก์ชันสมาชิกคงที่จะต้องมี const
(2) ฟังก์ชันสมาชิกคงที่สามารถเรียกใช้ฟังก์ชันสมาชิกคงที่เท่านั้น แต่ไม่สามารถเรียกใช้ฟังก์ชันสมาชิกพิเศษได้ และไม่สามารถเข้าถึงได้ แต่ไม่สามารถเปลี่ยนตัวแปรสมาชิกพิเศษได้
ตัวอย่างเช่น รหัสต่อไปนี้:
#include<iostream>usingnamespacestd;classClock{private:constinth;//แก้ไข h ให้เป็นสมาชิกประเภทคงที่ constintm;//แก้ไข m ให้เป็นสมาชิกประเภทคงที่ intconsts;//ทั้งสองวิธีข้างต้นเป็นไปได้ intx;public: นาฬิกา(inta, intb,intc):h(a),m(b),s(c){x=99;cout<<Constrctor!Called<<endl;}intShowTime(){cout<<h<<: <<m< <:<<s<<endl;return0;}intGetX()const{//x=99;cout<<x<<endl;return0;}};intmain(){constClockA(12,10, 30);A .GetX();return0;}
โปรดใส่ใจกับโค้ดบรรทัดที่ 29 และ 30 หากคุณใช้โค้ดบรรทัดที่ 29 ข้อผิดพลาดในการคอมไพล์จะถูกรายงาน ผลการทำงานจริงจะเป็นดังนี้:
การสร้างแนวคิดเรื่องค่าคงที่ในภาษา C++ จะทำให้ขอบเขตระหว่างการเปลี่ยนแปลงและความไม่เปลี่ยนรูปของแต่ละอ็อบเจ็กต์ในโปรแกรมชัดเจนขึ้น และยังช่วยเพิ่มความปลอดภัยและความสามารถในการควบคุมโปรแกรม C++ อีกด้วย
โปรดลองด้วยตัวคุณเอง