บทนำ
Dot (.) และ Arrow (->) ใช้เข้าถึงสมาชิกของ class/struct/union (ของ class type) แต่ใช้ในสถานการณ์ต่างกัน
กฎการใช้งาน
- a.b: ใช้เมื่อ b เป็นสมาชิกของ object (หรือ reference) a โดย a ต้องเป็น object จริง (หรือ reference) ของคลาส
- a->b: shorthand ของ
(*a).bใช้เมื่อ a เป็น pointer ไปยัง object เข้าถึงสมาชิก b ของ object ที่ a ชี้
Overloadability
.ไม่สามารถ overload ได้->สามารถ overload ได้ (operator->()) ใช้ใน smart pointers, iterators
ตัวอย่าง
#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;
}
ผลลัพธ์
a.b = 5 x->b = 5
ทั้งสองเข้าถึง member เหมือนกัน แต่ a เป็น object, x เป็น pointer
หมายเหตุ: เนื้อหานี้ซ้ำกับ ID 1004083517 และ 1004083518