30/09/2018, 17:43

Toán tử chuyển đổi kiểu?

Thắc mắc quá không hiểu trình biên dịch có lý do gì? Nhờ các bạn giải thích giúp mình vs!

#include <iostream>
using namespace std;
class PhanSo
{
public:
	PhanSo(int t = 0, int m = 1)
		:tu(t), mau(m){}
	~PhanSo(){}
	friend PhanSo operator*(const PhanSo &ps1, const PhanSo &ps2){
		PhanSo ps;
		ps.tu = ps1.tu*ps2.tu;
		ps.mau = ps1.mau*ps2.mau;
		return ps;
	}
	friend ostream& operator<<(ostream &os, const PhanSo &ps){
		os << ps.tu << "/" << ps.mau;
		return os;
	}
	//operator float () { return float(tu) / mau; }//why?
private:
	int tu;
	int mau;
};

int main()
{
	PhanSo ps;
	cout << ps * 3 << endl;

	return 0;
}

Trong đoạn code này nếu mình bỏ dấu chú thích trong đoạn code trên ->thì câu lệnh :cout<<ps*3<<endl; sẽ bị lỗi ngay.
Tell me Why?

vũ xuân quân viết 19:46 ngày 30/09/2018

cout << ps * 3 << endl;

biếng ps là object nên không thể có kiểu toán như trên được.

nhatlonggunz viết 19:59 ngày 30/09/2018

operator* anh để tham số là 2 PhanSo trong khi ở main() anh lại đem 1 PhanSo nhân với số nguyên, có 2 cách giải quyết vụ này:

  1. Ở main, tạo thêm PhanSo ps(3, 1) // là = 3 ấy.

  2. Overload (hình như gọi là nạp gì gì ấy thì phải) thêm 1 cái operator*

friend PhanSo operator*(const PhanSo &ps1, int number)
Gió viết 19:59 ngày 30/09/2018

Lỗi chắc biên dịch không biết cho về kiểu nào hoặc là cast Phanso về float hoặc tao 1 Phanso(3) như trường hợp ở trên.

Bài liên quan
0