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?
Bài liên quan
biếng ps là object nên không thể có kiểu toán như trên được.
operator* anh để tham số là 2
PhanSo
trong khi ở main() anh lại đem 1PhanSo
nhân vớisố nguyên
, có 2 cách giải quyết vụ này:Ở main, tạo thêm
PhanSo ps(3, 1) // là = 3 ấy
.Overload (hình như gọi là nạp gì gì ấy thì phải) thêm 1 cái operator*
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ặctao 1 Phanso(3)
như trường hợp ở trên.