01/10/2018, 12:11

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

HK boy viết 14:23 ngày 01/10/2018
SFraction::operator int()
{
	return m_iTu / m_iMau;
}

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:

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 ạ

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]

Nguyễn Minh Hiếu viết 14:24 ngày 01/10/2018

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 ạ

rogp10 viết 14:25 ngày 01/10/2018

Eureka: http://en.cppreference.com/w/cpp/language/cast_operator

Nguyễn Minh Hiếu viết 14:11 ngày 01/10/2018

nói thật là đọc xong mình vẫn ko hiểu sửa như thế nào bạn à ~~

rogp10 viết 14:16 ngày 01/10/2018

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.

viết 14:18 ngày 01/10/2018

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ành int. 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&)

Bài liên quan
0