Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ตัวดำเนินการ dot (.) และ -> ใน C ++ แตกต่างกันอย่างไร


ตัวดำเนินการจุดและลูกศรใช้ใน 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