ตัวดำเนินการ dot และ arrow ใช้ใน C ++ เพื่อเข้าถึงสมาชิกของคลาสหรือโครงสร้าง ซึ่งใช้ในสถานการณ์ที่แตกต่างกันเท่านั้น ใน C ++ ประเภทที่ประกาศเป็นคลาส struct หรือยูเนี่ยนถือเป็น "ประเภทคลาส" ต่อไปนี้จึงหมายถึงทั้งสามคน
-
a.b ใช้เฉพาะเมื่อ b เป็นสมาชิกของวัตถุ (หรืออ้างอิงถึงวัตถุ) ดังนั้นสำหรับ a.b เจตนาจะเป็นวัตถุจริง (หรือการอ้างอิงถึงวัตถุ) ของคลาสเสมอ
-
a->b เป็นสัญกรณ์ชวเลขสำหรับ (*a).b เช่น ถ้า a เป็นตัวชี้ไปยังวัตถุ จากนั้น a->bis เข้าถึงคุณสมบัติ b ของวัตถุที่ชี้ไป
โปรดทราบว่าจุดไม่สามารถโอเวอร์โหลดได้ แต่ -> สามารถโอเวอร์โหลดได้ ดังนั้นเราสามารถกำหนด ownfunction(operator->()) ของเราที่ควรจะเรียกเมื่อใช้โอเปอเรเตอร์นี้ ดังนั้น ถ้า a เป็นอ็อบเจ็กต์ของคลาสที่โอเวอร์โหลดโอเปอเรเตอร์ -> (ประเภททั่วไปคือตัวชี้อัจฉริยะและตัววนซ้ำ) ความหมายก็คือสิ่งที่ผู้ออกแบบคลาสนำไปใช้
การอ้างอิงมีความหมายแทนวัตถุดังนั้นฉันควรเพิ่ม "หรืออ้างอิงไปยังตัวชี้" ด้วยเช่นกัน อย่างไรก็ตาม ฉันคิดว่าสิ่งนี้จะทำให้เกิดความสับสนมากกว่ามีประโยชน์ เนื่องจากแทบไม่มีการใช้การอ้างอิงถึงตัวชี้ (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