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 hoặc cấu trúc. 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 loại 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à một thành viên của đối tượng (hoặc tham chiếu đến một đối tượng) a. Vì vậy, đối với a.b, một 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à một ký hiệu viết tắt cho (* a) .b, tức là nếu a là một con trỏ đến một đối tượng, thì a-> bis truy cập thuộc tính b của đối tượng mà a trỏ tới.
Lưu ý rằng dấu chấm không thể được nạp chồng nhưng -> có thể được nạp chồng, vì vậy chúng ta có thể xác định chức năng 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 classthat 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à người thiết kế lớp đã triển khai.
Các 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 đến một con trỏ" vào. Tuy nhiên, tôi nghĩ điều này sẽ khó hiểu hơn là hữu ích, vì tham chiếu topointers (T * &) hiếm khi được sử dụng.
Mã mẫu
#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
5 5