Có bốn cách để chuyển các đối tượng cho các hàm. Giả sử bạn có một lớp X và muốn chuyển nó cho một hàm fun, sau đó -
Chuyển theo giá trị
Điều này tạo ra một bản sao cục bộ nông của đối tượng trong phạm vi chức năng. Những thứ bạn sửa đổi ở đây sẽ không được phản ánh trong đối tượng được chuyển đến nó. Ví dụ,
Tuyên bố
void fun(X x);
Gọi điện
X x; fun(x);
Chuyển qua tài liệu tham khảo
Điều này chuyển một tham chiếu đến đối tượng cho hàm. Những thứ bạn sửa đổi ở đây sẽ được phản ánh trong đối tượng được chuyển tới nó. Không có bản sao của đối tượng được tạo. Ví dụ,
Tuyên bố
void fun(X &x);
Gọi điện
X x; fun(x);
Chuyển qua tham chiếu const
Điều này chuyển một tham chiếu const đến đối tượng cho hàm. Bạn không thể sửa đổi / gán lại đối tượng ở đây trực tiếp (bạn có thể sử dụng các phương thức của nó để làm như vậy). Điều này rất hữu ích nếu bạn muốn hàm chỉ có một bản sao chỉ đọc của đối tượng. Không có bản sao của đối tượng được tạo. Ví dụ,
Tuyên bố
void fun(X const &x);
Gọi điện
X x; fun(x);
Chuyển qua con trỏ const
Điều này chuyển một con trỏ const đến đối tượng đến hàm. Bạn không thể sửa đổi / gán lại con trỏ ở đây. Điều này rất hữu ích nếu bạn muốn hàm chỉ có địa chỉ của đối tượng này trong con trỏ. Không có bản sao của đối tượng được tạo. Ví dụ,
Tuyên bố
void fun(X const *x);
Gọi điện
X x; fun(&x);
Chuyển qua con trỏ const
Điều này chuyển một con trỏ đến đối tượng đến hàm. Điều này tương tự như truyền một tham chiếu đến đối tượng. Không có bản sao của đối tượng được tạo. Ví dụ,
Tuyên bố
void fun(X *x);
Gọi điện
X x; fun(&x);