Có 4 cách truyền đối tượng cho hàm. Giả sử lớp X truyền cho hàm fun:
1. Truyền bằng giá trị (Pass by value)
Tạo bản sao nông (shallow copy) cục bộ trong phạm vi hàm. Thay đổi không phản ánh ra đối tượng gốc.
// Khai báo void fun(X x); // Gọi X x; fun(x);
2. Truyền bằng tham chiếu (Pass by reference)
Truyền tham chiếu đến đối tượng. Thay đổi sẽ phản ánh ra đối tượng gốc. Không tạo bản sao.
// Khai báo void fun(X &x); // Gọi X x; fun(x);
3. Truyền bằng tham chiếu hằng (Pass by const reference)
Truyền tham chiếu const. Không thể sửa/gán trực tiếp đối tượng ở đây (nhưng có thể dùng phương thức của nó làm vậy). Hữu ích khi hàm chỉ cần bản sao chỉ đọc. Không tạo bản sao.
// Khai báo void fun(X const &x); // Gọi X x; fun(x);
4. Truyền bằng con trỏ hằng (Pass by const pointer)
Truyền con trỏ const. Không thể sửa/gán con trỏ ở đây. Hữu ích khi hàm chỉ cần địa chỉ đối tượng. Không tạo bản sao.
// Khai báo void fun(X const *x); // Gọi X x; fun(&x);
5. Truyền bằng con trỏ (Pass by pointer)
Truyền con trỏ đến đối tượng. Tương tự truyền tham chiếu. Không tạo bản sao.
// Khai báo void fun(X *x); // Gọi X x; fun(&x);