Dấu & trong &operator có ý nghĩa gì?

Em có 3 lệnh như sau:

PhanSo operator+(PhanSo a, PhanSo b);

&

PhanSo &operator+(const PhanSo a, const PhanSo b);

&

PhanSo &operator+(const PhanSo &a, const PhanSo &b);

Khi chạy chương trình thì nó ra 3 kết quả giống nhau. Cho em hỏi là dấu & để trước operator có ý nghĩa gì vậy ạ? Và truyền vào tham số const PhanSo& có ý nghĩa gì không ạ?

Văn vẻ hơi lủng củng mong mấy anh chị thông cảm.

Mình có thể giải thích như này, nếu bạn chưa hiểu đâu thì cứ hỏi tiếp:

  • Thằng đầu tiên:
PhanSo operator+(PhanSo a, PhanSo b);

Sẽ trả về giá trị là một PhanSo và tham số a, b được dùng theo kiểu pass-by-value (tham trị). Tức 2 biến này là 1 bản sao của biến được truyền vào lúc gọi.

  • Thằng thứ 2:
PhanSo &operator+(const PhanSo a, const PhanSo b);

2 tham số a và b là hằng số, ngăn không cho thay đổi giá trị của nó trong hàm. Thay đổi sẽ lỗi. Hàm vẫn trả về giống như thằng số 1

  • Thằng thứ 3:
PhanSo &operator+(const PhanSo &a, const PhanSo &b);

Hai tham số này truyền vào theo kiểu pass-by-refference (tham chiếu), tức 2 biến này chính là 2 biến truyền vào lúc gọi. Như vậy, nếu thay đổi giá trị 2 biến này trong hàm thì giá trị 2 biến truyền vào khi gọi hàm cũng thay đổi. Tuy nhiên, lại có từ khóa const nghĩa là chúng sẽ không được thay đổi.

Dấu & trước operator có nghĩa hàm này sẽ trả về giá trị dạng refference. Cũng giống như pass-by-refference đã nói ở trên. Còn 2 thằng trên kia trả về dạng value.

  • Nhận xét:
    – Khi truyền với tham chiếu, chương trình sẽ không cần tạo thêm biến copy. Tiết kiệm bộ nhớ. Đây cũng là lý do tại sao mảng trong C/C++ luôn được truyền theo tham chiếu.
    – Đưa vào từ khóa const để ngăn không cho phép thay đổi giá trị của biến.
    – Thêm & vào trước tham số nếu muốn thay đổi của biến ở hàm con cũng thay đổi biến được truyền vào ở nơi hàm được gọi

Bổ sung:

  • Bạn đọc thêm về tham chiếu và tham trị nhé.

(Có gì sai ae chém nhẹ tay nhé)

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?