Nạp chồng toán tử << trong class phân số

Dạo gần gần đây em đang học lập trình C++ đến đoạn hướng đối tượng trong C++. Có cái này em muốn hỏi mọi người, mong các bạn chỉ cho em:

Khi em nạp chồng toán tử << trong lớp phân số em khai báo như sau:

friend ostream& operator<<(osstream &out,phanso &a);

thì trình biên dịch báo lỗi. Đến khi sửa thành:

friend ostream& operator<<(osstream &out,phanso a); 

thì lại được.

Mong mọi người chỉ cho em biết tại sao lại phải bỏ &&a cũng như tại sao khai báo ban đầu lại sai.

phải viết là

friend std::ostream& operator<<(std::ostream& out, const PhanSo& a);

nha. Truyền const reference chứ ko phải truyền reference :V

nếu ko có const thì sẽ ko thể truyền tham chiếu tới đối tượng tạm thời hoặc đối tượng phân số hằng được:

const phanso a{1, 2}; // 1/2
std::cout << a; // lỗi vì ko thể cast `const phanso` hoặc `const phanso&` thành `phanso&` được
std::cout << phanso{1, 2}; // lỗi vì ko thể cast rvalue `phanso` thành lvalue `phanso&` được

khai báo ko phải là reference mà là copy thì nó tốn thêm 1 bước copy ra biến mới nữa, đối với phanso có 2 biến tử và mẫu thì ko sao, với mấy kiểu class khác có cấp phát động thì có sao vì nó chậm :V

4 Likes

cảm ơn nha
mình hiểu rồi

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