Lỗi viết hàm operator int()
Chào mọi người, tình hình là em viết một class phân số và có viết operator cho class này, sau đó còn viết thêm một hàm operator int() để dễ dàng chuyển kiểu, nhưng vấn đề nằm ở chỗ khi cout trực tiếp tổng 2 phân số thì kết quả sẽ auto ép thành kiểu int, nếu xóa hàm operator int() thì sẽ ko bị thế và đúng, vấn đề hơn nữa là em không thể viết hàm operator float() vì khi chạy chương trình sẽ không hiểu nên ép thành int hay float, trong khi cái em cần là kết quả ở dạng phân số và khi cần mới thực hiện chuyển kiểu. em bị vấn đề này đã khoảng 3 tuần rồi và ko sửa được nên mới hỏi anh chị cách sửa cho đỡ tốn thời gian ạ, code em để bên dưới ạ!!
http://codepad.org/JJ6nv0Ba
Nếu bạn muốn lấy phần nguyên thì viết thành function get_int_part, mình không recommend viết operator trong trường hợp này.
p/s:
Mình không thích câu này lắm.
[spoiler]Ngày xưa trường mình có 1 huyền thoại ôm 1 bài 3 tháng, trong suốt 3 tháng ấy là biết bao nhiêu bug, bao nhiêu cảm xúc dồn nén,… và cuối cùng anh ấy cũng đã thành công, fix hết sạch bug :v[/spoiler]
dạ vì hồi trươc em cũng hỏi mấy câu cơ bản kiểu vầy mà bị vài người nói tự fix nên giờ thêm lí do vào cho an toàn ạ, với cả deadline em nó cứ dồn từ bài này sang bài kia nên ko làm được bài cũ thì sẽ ko làm được bài mới nên thành ra phải đi hỏi thôi ạ
Eureka: http://en.cppreference.com/w/cpp/language/cast_operator
nói thật là đọc xong mình vẫn ko hiểu sửa như thế nào bạn à ~~
Chú ý là cách này phải có C++11 thì mới đúng được. Thực ra đó chỉ là thêm một từ khóa.
thêm explicit vô nữa là đúng nhưng ở đây có vấn đề khác:
friend ostream & operator << (ostream & os, SFraction & ps);
sửa lại là
friend ostream & operator << (ostream & os, const SFraction & ps);
là xong
lý do là vì
ps1 + ps2
là biến tạm thời nên ko thể truyền vào operator<< dưới dạng tham chiếu có thể thay đổi được (SFraction&
), nên nó mới ép kiểu thànhint
. Biến tạm thời chỉ có thể truyền vào dưới dạng copy, r-value hoặc const reference (const SFraction&
)