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

ตัวดำเนินการดัชนีและเรียกฟังก์ชัน

โอเวอร์โหลด [] และ () เพื่อให้ชนิดข้อมูลทำงานเหมือนคอนเทนเนอร์หรือออบเจ็กต์เรียกใช้ได้

ตัวดำเนินการดัชนีและเรียกฟังก์ชัน เป็นบทเรียน C++ Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C++ Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน

ตัวดำเนินการ [] — การเข้าถึงด้วยดัชนี

โอเวอร์โหลด [] เพื่อให้ชนิดข้อมูลของคุณใช้งานได้เหมือนอาร์เรย์ มีประโยชน์สำหรับคอนเทนเนอร์ เมทริกซ์ และคลาสรูปภาพ

class Vec {
    std::vector<double> data_;
public:
    double& operator[](size_t i) { return data_[i]; }
    double  operator[](size_t i) const { return data_[i]; }
};

การโอเวอร์โหลดสองแบบ: const และ non-const

ควรจัดเตรียมไว้ทั้งสองแบบ การเรียกใช้กับอินสแตนซ์ const จะเลือกการโอเวอร์โหลดแบบ const ส่วนแบบ non-const อนุญาตให้กำหนดค่าได้

การตรวจสอบขอบเขต

ตามธรรมเนียมแล้ว operator[] ธรรมดาจะไม่ตรวจสอบขอบเขต ให้จัดเตรียมเมธอด at() แยกต่างหากที่โยนข้อยกเว้น เช่นเดียวกับไลบรารีมาตรฐาน

double& at(size_t i) {
    if (i >= data_.size()) throw std::out_of_range("");
    return data_[i];
}

ตัวห้อยหลายมิติ (C++23)

C++23 เพิ่มตัวห้อยที่คั่นด้วยจุลภาค: m[i, j] ส่วนเวอร์ชันก่อนหน้านี้ต้องใช้การเรียกฟังก์ชันหรือตัวห้อยต่อกัน

// C++23
double& operator[](size_t i, size_t j);

// Pre-C++23 workaround
double& operator()(size_t i, size_t j);

ตัวดำเนินการ () — การเรียกฟังก์ชัน

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

struct Square {
    int operator()(int x) const { return x * x; }
};

Square sq;
std::cout << sq(5);   // 25

ฟังก์ชันอ็อบเจ็กต์ที่มีสถานะ

ตัวดำเนินการเรียกฟังก์ชันทำงานร่วมกับตัวแปรสมาชิกได้ จึงเป็นสิ่งที่เรียกใช้งานได้และมีสถานะ

struct GreaterThan {
    int threshold;
    bool operator()(int x) const { return x > threshold; }
};

GreaterThan over10{10};
std::cout << over10(15);   // true

ใช้กับอัลกอริทึมของ STL

ส่งอินสแตนซ์ของฟังก์ชันอ็อบเจ็กต์ให้กับอัลกอริทึมแทนฟังก์ชัน

std::vector<int> v = {1, 11, 2, 22};
auto it = std::find_if(v.begin(), v.end(), GreaterThan{10});

ตัวดำเนินการที่รับอาร์กิวเมนต์หลายตัว

ทั้ง [] (ก่อน C++23) และ () สามารถโอเวอร์โหลดให้รับอาร์กิวเมนต์จำนวนเท่าใดก็ได้ ก่อน C++23 ควรเลือก () หากต้องการการเข้าถึงลักษณะเมทริกซ์ที่ยืดหยุ่นกว่า

การคืนค่าการอ้างอิงเทียบกับค่า

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

อ็อบเจ็กต์พร็อกซี

หาก operator[] จำเป็นต้องคืนอ็อบเจ็กต์ที่ซับซ้อน (เช่น ฟิลด์บิต) ให้คืนคลาสพร็อกซีขนาดเล็กที่มีตัวดำเนินการแปลงและกำหนดค่า

ตัวอย่างการใช้งานจริง

การใช้งานทั่วไป:

  • std::vector::operator[]
  • std::map::operator[] — แทรกข้อมูลเมื่อไม่พบคีย์
  • คลาสเมทริกซ์: m(i, j)
  • ฟังก์ชันอ็อบเจ็กต์สำหรับอัลกอริทึม

ตรวจสอบอย่างรวดเร็ว

คุณทำให้อินสแตนซ์ของคลาสเรียกใช้งานได้เหมือนฟังก์ชันได้อย่างไร

สรุปทบทวน

โอเวอร์โหลด [] สำหรับการเข้าถึงด้วยดัชนี (จัดเตรียมการโอเวอร์โหลดทั้งแบบ const และ non-const) โอเวอร์โหลด () เพื่อให้อินสแตนซ์เรียกใช้งานได้ ซึ่งเป็นพื้นฐานของฟังก์ชันอ็อบเจ็กต์และแลมบ์ดา

คำถามที่พบบ่อย

บทเรียน “ตัวดำเนินการดัชนีและเรียกฟังก์ชัน” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ตัวดำเนินการดัชนีและเรียกฟังก์ชัน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C++ Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ตัวดำเนินการดัชนีและเรียกฟังก์ชัน”

โอเวอร์โหลด [] และ () เพื่อให้ชนิดข้อมูลทำงานเหมือนคอนเทนเนอร์หรือออบเจ็กต์เรียกใช้ได้ คุณปฏิบัติ C++ Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C++ Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C++ Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “ตัวดำเนินการดัชนีและเรียกฟังก์ชัน” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C++ Academy นี้ได้ไหม

ได้ บทเรียน C++ Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. ตัวดำเนินการเลขคณิตและการเปรียบเทียบ
  2. ตัวดำเนินการแทรกและดึงข้อมูลจากกระแส
  3. ตัวดำเนินการดัชนีและเรียกฟังก์ชัน
  4. ตัวดำเนินการเปรียบเทียบสามทางใน C++20
← กลับไปที่ C++ Academy