30/09/2018, 16:03
Quá tải operator
Viết các hàm quá tải operator thực hiện các phép cộng, trừ, nhân, chia 2 số phức, 2 ma trận
Gợi ý cho e code của phép cộng, các phép tính còn lại để e tự quẩy :3.
Bài liên quan
Em muốn làm cho Class hay chỉ là viết hàm thôi?
Cho class ạ
A gợi ý giúp em ạ
Ở đây anh làm ví dụ về operator+
Em có thể xem thêm ví dụ về class template (phức tạp hơn)
Hoặc xem bài giảng này, tiếng khó nghe 1 chút, có điều kiện anh sẽ làm lại video này
Hê hê, cảm ơn a về cái đoạn code mẫu ví dụ kia nhá, e làm đc operator + 2 số phức rồi.
“Người thảo luận để tìm ra cách giải hay cho một bài toán khó sẽ trở thành lập trình viên giỏi. Người hay hỏi bài tập thì không” Wow, @phatnguyen em đã thực hiện được câu này rồi hehe. Có gì thắc mắc tiếp tục hỏi nha, em hỏi nhiều anh giỏi hơn.
Hì, e làm tiếp các cái còn lại đây ạ
Cảm ơn a nhiều, rất nhiệt tình ạ
Khi nào làm xong hết cả bài thì share lên cho mọi người xem thử nhé. Anh cũng muốn xem thử cái số Phức nó làm như thế nào.
Phép chia số phức e vẫn chưa ép kiểu được, kết quả vẫn ko đúng, còn lại là xong ạ. E đang làm các phép toán với ma trận
Good luck Anh thấy em học nghiêm túc đấy, chúc em thành công nhé.
Hi, chỗ này cho mình hỏi, sao ta ko trả về là sophuc& mà lại trả về là sophuc.
Chỗ này trả về
sophuc&
vàsophuc
có công dụng khác nhau.sophuc
tức là mình trả về giá trị của một biếnsophuc
.sophuc&
tức là mình trả về biến (hay nói cách khác làreference
)sophuc
Công dụng của giá trị thì nó chỉ là giá trị thôi. Công dụng của
reference
là gì nếu ọi người chưa nắm thì xemNói ngắn gọn, nếu trả về là
reference
thì mình có thể tiếp tục xử lý trên cái biến trả về, tương đương với xử lý lên chính biến đó.Nhưng trong trường hợp
operator+=
thì có lẽ mình không cần phải trả vềreference
vif mình không có nhu cầu tính tiếp trên số đó.Nhưng với
operator++
thì có lẽ là mình cần. Vì thông thường ta có thể tính tiếp trên biến đó, sau phép ++.Ví dụ nhé, trong ví dụ này, mình cần trả về luôn cái reference của x để tiếp tục tính cho phép
gán =
Về phần ví dụ này có thể chưa chuẩn, để Đạt hỏi thêm một anh nữa để confirm lại.
Bổ sung thêm về phần
operator>>
vàoperator<<
ở code mẫu ở trên. Đạt đã trả về reference củastd::istream
vàstd::ostream
để ta tiếp tục làm việc trên operator này.Ví dụ này sẽ dễ hiểu hơn. Ở đây ta có thể liên tục sử dụng
operator<<
vì ta trả vềreference
của nó.Em có ý kiến ở phần:
Theo e thì mình tùy trường hợp phép toán “++” của mình là prefix hay postfix. Nếu là prefix (vd: ++a) thì minh return là reference tới new value của mình, còn nếu là postfix (vd: a++) thì mình sẽ return copy value của mình
Mình return reference là để optimize hơn, đỡ tốn cost trong việc copy constructor & destructor của biến tạm lúc return về.
Chính xác, lúc anh viết anh cũng có nghĩ tới cái này, nhưng anh lười quá không viết rõ ra.
Cũng là một ý kiến chính xác nữa, cái này anh quên
Anh cũng bổ sung thêm cái này nữa. Trong ví dụ dưới đây cái prefix mình nên trả về
&
How to overload the operator++ in two different ways for postfix a++ and prefix ++a?