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

Arrow Operator (->) ใน C++ คืออะไร


Dot operator และ Arrow operator ใช้ทั้งคู่ใน C++ เพื่อเข้าถึงสมาชิกของคลาสหรือโครงสร้าง (struct) พวกมันใช้ในสถานการณ์ที่ต่างกัน ใน C++ ชนิดที่ประกาศเป็น class, struct, หรือ union ถือว่าเป็น "of class type" ดังนั้นต่อไปนี้หมายถึงทั้งสาม

  • a.b ใช้ได้ก็ต่อเมื่อ b เป็นสมาชิกของออบเจกต์ (หรืออ้างอิงถึงออบเจกต์) a ดังนั้นสำหรับ a.b, a จะเป็นออบเจกต์จริง (หรืออ้างอิงถึงออบเจกต์) ของคลาสเสมอ

  • a->b เป็น shorthand notation สำหรับ (*a).b กล่าวคือ หาก a เป็น pointer ที่ชี้ไปยังออบเจกต์ a->b จะเข้าถึง property b ของออบเจกต์ที่ a ชี้ไป

โปรดสังเกตว่า dot operator ไม่สามารถโอเวอร์โหลดได้ แต่ -> สามารถโอเวอร์โหลดได้ ดังนั้นเราสามารถกำหนดฟังก์ชันของเราเอง (operator->()) ที่ควรถูกเรียกเมื่อใช้ออเปอเรเตอร์นี้ ดังนั้นถ้า a เป็นออบเจกต์ของคลาสที่โอเวอร์โหลด operator-> (ชนิดทั่วไปคือ smart pointers และ iterators) ความหมายจะเป็น whatever the class designer implemented

References ในเชิงความหมาย คือ aliases ของออบเจกต์ ดังนั้นฉันควรเพิ่ม "or reference to a pointer" เข้าไปด้วย แต่คิดว่าจะทำให้สับสนมากกว่าช่วยได้ เนื่องจาก references to pointers (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