Toán tử dấu chấm và mũi tên đều được sử dụng trong C ++ để truy cập các thành viên của một lớp. Chúng chỉ được sử dụng trong các tình huống khác nhau. Trong C ++, các kiểu được khai báo là class, struct hoặc union được coi là "thuộc kiểu lớp". Vì vậy, phần sau đề cập đến cả ba trong số chúng.
- a.b chỉ được sử dụng nếu b là thành viên của đối tượng (hoặc tham chiếu [1] tới một đối tượng) a. Vì vậy, đối với a.b, a sẽ luôn là một đối tượng thực tế (hoặc một tham chiếu đến một đối tượng) của một lớp.
- a → b về cơ bản là ký hiệu viết tắt cho (* a) .b, tức là, nếu a là con trỏ tới một đối tượng, thì a → b đang truy cập thuộc tính b của đối tượng mà a trỏ tới .
Lưu ý rằng. không quá tải. → là toán tử có thể nạp chồng, vì vậy chúng ta có thể xác định hàm của riêng mình (toán tử → ()) sẽ được gọi khi toán tử này được sử dụng. vì vậy nếu a là một đối tượng của một lớp nạp chồng toán tử → (các kiểu phổ biến như vậy là con trỏ thông minh và trình vòng lặp), thì ý nghĩa là bất cứ điều gì mà trình thiết kế lớp đã triển khai.
[1] Tham chiếu, về mặt ngữ nghĩa, là bí danh của các đối tượng, vì vậy tôi cũng nên thêm "hoặc tham chiếu tới một con trỏ" vào số 3. Tuy nhiên, tôi nghĩ điều này sẽ khó hiểu hơn là hữu ích, vì các tham chiếu đến con trỏ (T * &) hiếm khi được sử dụng.
ví dụ
#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; }
Đầu ra
Điều này sẽ đưa ra kết quả -
5 5