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:
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.
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
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é)