ตัวดำเนินการจุดและลูกศรใช้ใน C++ เพื่อเข้าถึงสมาชิกของคลาส พวกมันถูกใช้ในสถานการณ์ที่ต่างกัน ใน C ++ ประเภทที่ประกาศเป็นคลาส struct หรือยูเนี่ยนถือเป็น "ประเภทคลาส" ต่อไปนี้จึงหมายถึงทั้งคู่
- a.b จะใช้ก็ต่อเมื่อ b เป็นสมาชิกของอ็อบเจกต์ (หรืออ้างอิง[1] ไปยังอ็อบเจกต์) ดังนั้นสำหรับ a.b แล้ว a จะเป็นวัตถุจริง (หรือการอ้างอิงถึงวัตถุ) ของคลาสเสมอ
- a →b เป็นสัญกรณ์ชวเลขสำหรับ (*a).b เช่น ถ้า a เป็นตัวชี้ไปยังอ็อบเจกต์ a →b กำลังเข้าถึงคุณสมบัติ b ของอ็อบเจ็กต์ที่ชี้ไป
โปรดทราบว่า ไม่สามารถโอเวอร์โหลดได้ → เป็นโอเปอเรเตอร์ที่โอเวอร์โหลดได้ ดังนั้นเราจึงสามารถกำหนดฟังก์ชันของเราเอง (ตัวดำเนินการ →()) ที่ควรเรียกเมื่อใช้โอเปอเรเตอร์นี้ ดังนั้นหาก a เป็นอ็อบเจ็กต์ของคลาสที่โอเวอร์โหลดโอเปอเรเตอร์ → (ประเภททั่วไปคือตัวชี้อัจฉริยะและตัววนซ้ำ) ความหมายก็จะเป็นอะไรก็ตามที่ผู้ออกแบบคลาสนำไปใช้
[1] การอ้างอิงมีความหมายแทนวัตถุ ดังนั้นฉันจึงควรเพิ่ม "หรือการอ้างอิงไปยังตัวชี้" ใน #3 ด้วยเช่นกัน อย่างไรก็ตาม ฉันคิดว่าสิ่งนี้จะทำให้เกิดความสับสนมากกว่ามีประโยชน์ เนื่องจากแทบจะไม่เคยใช้การอ้างอิงถึงตัวชี้ (T*&)
ตัวอย่าง
#include<iostream> class A { public: int b; A() { b = 5; } }; int main() { A a = A(); A* x = &a; std::cout << "a.b = " << a.b << "\n"; std::cout << "x->b = " << x->b << "\n"; return 0; }
ผลลัพธ์
สิ่งนี้จะให้ผลลัพธ์ -
5 5