0Pricing
C++ Academy · บทเรียน

ฟังก์ชันสมาชิก 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ตัวแปรและพารามิเตอร์ const
  2. ฟังก์ชันสมาชิก const
  3. constexpr และเวลาคอมไพล์
  4. consteval และ constinit
← กลับไปที่ C++ Academy