6.4.2 Truyền vào một đối tượng theo kiểu tham trị

Các đối tượng có thể được truyền bằng giá trị như các kiểu dữ liệu cơ bản như int hay float không ?

Câu trả lời là “YES”.

Nhưng bạn phải nhớ rằng bất kỳ sửa đổi nào được thực hiện trên các tham số này sẽ biến mất sau khi thoát khỏi hàm – bất kỳ thay đổi nào lên đối tượng sẽ chỉ xảy ra với bản sao của nó chứ không phải chính nó.

Ví dụ sau →

minh hoạ tất cả ba biến thể có thể về việc sử dụng một đối tượng trong một hàm. Tên của mỗi hàm đã nói lên cách thức mà chúng nhận các tham số. Cả 3 hàm này đều cố gắng đặt tên cho đối tượng đầu vào thông qua hàm NameMe.

Ngay sau khi việc gọi hàm hoàn tất, hàm MakeSound được kích hoạt để kiểm tra xem việc đặt tên có thành công hay không.

Chương trình cho ra kết quả sau:

no_name says: no comments

Beta says: no comments

Gamma says: no comments

Điều này có nghĩa là việc đặt tên cho đối tượng pet là “Alpha” chỉ ảnh hưởng đến một bản sao của đối tượng pet, chứ không phải chính nó.

Ngoài ra còn có một sự bất tiện nghiêm trọng khác xảy ra khi bạn truyền vào cho hàm giá trị một đối tượng của một phân lớp của một lớp được chỉ định là tham số. Nó có thể dẫn đến việc “biến mất” của một phần của đối tượng. Vì vậy, truyền một đối tượng theo tham trị nói chung méo phải là một ý tưởng tốt.