ฟังก์ชันสมาชิก const
ระบุเมธอดแบบอ่านอย่างเดียว
ฟังก์ชันสมาชิก const เป็นบทเรียน C++ Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C++ Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน
ความหมายของฟังก์ชันสมาชิกแบบคงที่
ฟังก์ชันสมาชิกที่กำกับด้วย const รับประกันว่าจะไม่แก้ไขสถานะที่สังเกตได้ของออบเจ็กต์ คีย์เวิร์ดนี้จะอยู่หลังรายการพารามิเตอร์
#include <iostream>
class Counter {
int n = 0;
public:
int value() const { return n; } // read-only
void inc() { ++n; }
};
int main() {
Counter c;
c.inc();
std::cout << c.value() << "\n";
}ออบเจ็กต์แบบคงที่เรียกเมธอดแบบคงที่
สำหรับออบเจ็กต์ const คุณจะเรียกได้เฉพาะฟังก์ชันสมาชิกที่เป็น const เท่านั้น เมธอดที่ไม่ใช่ค่าคงที่ไม่อนุญาตให้เรียก
#include <iostream>
class Counter {
int n = 0;
public:
int value() const { return n; }
void inc() { ++n; }
};
int main() {
const Counter c;
std::cout << c.value() << "\n"; // OK
// c.inc(); // ERROR
}this กลายเป็นค่าคงที่
ภายในฟังก์ชันสมาชิกแบบคงที่ this จะเป็นตัวชี้ไปยังค่าคงที่ ดังนั้นคอมไพเลอร์จะปฏิเสธความพยายามใด ๆ ที่จะแก้ไขสมาชิก
กำหนดให้เมธอดที่อ่านอย่างเดียวทุกตัวเป็นค่าคงที่
ฟังก์ชันอ่านค่า ฟังก์ชันสอบถาม และฟังก์ชันพิมพ์ผลควรเป็น const ทั้งหมด วิธีนี้ทำให้ฟังก์ชันเหล่านี้ทำงานกับออบเจ็กต์และการอ้างอิงแบบคงที่ได้
การโอเวอร์โหลดแบบคงที่
คุณสามารถจัดเตรียมเมธอดทั้งรุ่นที่เป็นค่าคงที่และรุ่นที่ไม่เป็นค่าคงที่ได้ โดยคอมไพเลอร์จะเลือกตามว่าออบเจ็กต์เป็นค่าคงที่หรือไม่
#include <iostream>
#include <vector>
class Box {
std::vector<int> v{1, 2, 3};
public:
int& at(int i) { return v[i]; } // mutable access
const int& at(int i) const { return v[i]; } // read-only access
};
int main() {
Box b;
b.at(0) = 99;
std::cout << b.at(0) << "\n";
}คีย์เวิร์ด mutable
สมาชิก mutable สามารถเปลี่ยนแปลงได้แม้อยู่ภายในเมธอดแบบคงที่ เหมาะสำหรับแคชหรือตัวนับที่ไม่ถือเป็นส่วนหนึ่งของสถานะเชิงตรรกะ
#include <iostream>
class Cache {
mutable int hits = 0;
int data = 42;
public:
int get() const { ++hits; return data; } // hits is mutable
int hitCount() const { return hits; }
};
int main() {
Cache c;
c.get(); c.get();
std::cout << c.hitCount() << "\n";
}ค่าคงที่เชิงตรรกะกับค่าคงที่เชิงกายภาพ
const จะปกป้องสถานะเชิงตรรกะของออบเจ็กต์ ส่วน mutable อนุญาตให้รายละเอียดการนำไปใช้งาน เช่น แคช เปลี่ยนแปลงได้โดยไม่ทำลายคำรับประกันนั้น
เมธอดแบบคงที่กับการอ้างอิงแบบคงที่
ฟังก์ชันที่รับ const& จะเรียกได้เฉพาะเมธอดแบบคงที่กับออบเจ็กต์นั้นเท่านั้น นี่เป็นอีกเหตุผลหนึ่งที่ควรกำหนดให้ฟังก์ชันสอบถามเป็นค่าคงที่
#include <iostream>
class Counter {
int n = 5;
public:
int value() const { return n; }
};
void report(const Counter& c) {
std::cout << c.value() << "\n"; // needs value() to be const
}
int main() { Counter c; report(c); }การคืนค่าการอ้างอิงแบบคงที่
ตัวเข้าถึงแบบคงที่มักคืนค่า const& เพื่อเปิดให้เข้าถึงสมาชิกโดยไม่อนุญาตให้แก้ไขหรือคัดลอก
อย่าลบคุณสมบัติค่าคงที่ด้วยการแปลงชนิด
การใช้ const_cast เพื่อแก้ไขออบเจ็กต์ที่เป็นค่าคงที่จริงถือเป็นพฤติกรรมที่ไม่กำหนดไว้ ให้ใช้ mutable สำหรับข้อยกเว้นที่มีเหตุผลแทน
คลาสที่ใช้ค่าคงที่อย่างถูกต้อง
คลาสที่ออกแบบมาอย่างดีจะกำหนดให้เมธอดทุกตัวที่ไม่เปลี่ยนแปลงข้อมูลเป็น const จึงทำงานในบริบทแบบคงที่ทั่วทั้งโปรแกรมได้อย่างราบรื่น
ตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความเข้าใจเกี่ยวกับฟังก์ชันสมาชิกแบบคงที่ของคุณ
สรุปทบทวน
คุณได้เรียนรู้การกำหนดให้เมธอดที่อ่านอย่างเดียวเป็น const การที่ออบเจ็กต์แบบคงที่เรียกได้เฉพาะเมธอดแบบคงที่ วิธีโอเวอร์โหลดตามคุณสมบัติคงที่ และวิธีที่ mutable อนุญาตให้เปลี่ยนแปลงรายละเอียดการนำไปใช้งานได้ หลีกเลี่ยง const_cast และออกแบบคลาสให้ใช้ค่าคงที่อย่างถูกต้องตั้งแต่เริ่มต้น
คำถามที่พบบ่อย
บทเรียน “ฟังก์ชันสมาชิก const” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ฟังก์ชันสมาชิก const” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C++ Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ฟังก์ชันสมาชิก const”
ระบุเมธอดแบบอ่านอย่างเดียว คุณปฏิบัติ C++ Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C++ Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน C++ Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “ฟังก์ชันสมาชิก const” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน C++ Academy นี้ได้ไหม
ได้ บทเรียน C++ Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ตัวแปรและพารามิเตอร์ const
- ฟังก์ชันสมาชิก const
- constexpr และเวลาคอมไพล์
- consteval และ constinit