Thắc mắc toán tử nhập - xuất và operator

Mọi người giúp mình những vấn đề sau nhé:

  • Thực chất operator là cái gì và cách thức hoạt động ra sao?
  • Ví dụ nhập xuất 1 phân số
istream& operator >>(istream& is, PHANSO &ps)
{
        //Các câu lệnh
}
ostream& operator <<(ostream& os, PHANSO &ps)
{
      //Các câu lệnh
}

Giải thích những câu lệnh trên :frowning:

  • Khi nào thì nên dùng operator ???. Ví dụ để cộng 2 phân số thì nên dùng operator+ hay dùng hàm bình thường?

Operator là hàm để định nghĩa các toán tử trong class, theo mình nôm na là thế.

Vẫn không hiểu lắm, bạn có thể nói rõ hơn về cú pháp nhập hoặc xuất ở trên không?

Theo mình operator bản chất cũng là hàm nhưng được biểu diễn dưới kí hiệu toán học.

Việc overload operator >> hay << không nhất thiết là phải viết theo dạng trên. Tuy nhiên lợi ích của nó là có thể viết gọn việc nhập xuất.

Vì các toán tử overload hạn chế. Tuy nhiên theo mình nếu mà các hàm là toán thì nên viết. Vd viết a+b*c sẽ dễ hơn b.mul©.add(a)

operator nghĩa là toán tử. Nó được tạo ra để nạp chồng các toán tử +, -, . , /, >> , << [], … cho các kiểu dữ liệu mới ( class). Các toán tử giúp người đọc dễ hiểu, nhìn biểu thức gọn nhẹ hơn khi dùng hàm. Vd khi muốn dùng A + B thì rõ ràng nó dễ nhìn, gần gũi với ta hơn khi viết A.add(B) (Giả sử có hàm add() trong class rồi)

Theo mình viết như này mới đúng
ostream& operator <<(ostream& os, const PHANSO &ps) vì toán tử << không thay đổi dữ liệu.

1 Like

Tại sao phải truyển tham chiếu trong nạp chồng toán tử nhập, xuất à bạn?
Và tại sao phải dùng hàm khởi tạo sao chép trong hàm nạp chồng toán tử nhập??

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