dùng operator các bạn có thể tính toán trên các đối tượng sử dụng
struct như phân số, số phức, ma trận như trên các con số kiểu int,
float, cách diễn đạt tự nhiên theo ngôn ngữ toán học, kết hợp nhiều
phép toán trong biểu thức. vd như các bạn có 3 phân số A,B,C, mà muốn
kết hợp thành 1 biểu thức như: D= (A+B)/C thì chỉ cần viết y nguyên
D=(A+B)/C.
Nếu ko dùng operator phải gọi nhiều lần các hàm rất mất công.
struct như phân số, số phức, ma trận như trên các con số kiểu int,
float, cách diễn đạt tự nhiên theo ngôn ngữ toán học, kết hợp nhiều
phép toán trong biểu thức. vd như các bạn có 3 phân số A,B,C, mà muốn
kết hợp thành 1 biểu thức như: D= (A+B)/C thì chỉ cần viết y nguyên
D=(A+B)/C.
Nếu ko dùng operator phải gọi nhiều lần các hàm rất mất công.
- Code:
#include<iostream.h>
#include<math.h>
struct PhanSo
{
int iTuSo; // Tu so cua phan so.
int iMauSo; // Mau so cua phan so.
};
void Xuat(int a,int b)
{
cout << "\nTu so c = " << a;
cout << "\nMau so c = " << b;
}
int uscln(int x,int y)
{
x=abs(x);y=abs(y);
if(x*y==0)
return 1;
while(x!=y)
if(x>y)
x-=y;
else
y-=x;
return x;
}
PhanSo rutgon(PhanSo p)
{
PhanSo c;
int x;
x=uscln(p.iTuSo,p.iMauSo);
c.iTuSo=p.iTuSo/x;
c.iMauSo=p.iMauSo/x;
return c;
}
PhanSo operator +(const PhanSo &a, const PhanSo &b)
{
PhanSo c;
c.iTuSo = a.iTuSo * b.iMauSo + b.iTuSo * a.iMauSo;
c.iMauSo = a.iMauSo * b.iMauSo;
return rutgon(c);
}
bool operator >(const PhanSo &a, const PhanSo &b)
{
long lMauSoQuyDong = (long)a.iMauSo * b.iMauSo;
long lTuSoQuyDongA = (long)a.iTuSo * b.iMauSo;
long lTuSoQuyDongB = (long)b.iTuSo * a.iMauSo;
if (lMauSoQuyDong > 0)
return lTuSoQuyDongA > lTuSoQuyDongB;
return lTuSoQuyDongA < lTuSoQuyDongB;
}
PhanSo operator -(const PhanSo &a, const PhanSo &b)
{
PhanSo c;
c.iTuSo=a.iTuSo*b.iMauSo - b.iTuSo*a.iMauSo;
c.iMauSo=a.iMauSo*b.iMauSo;
return rutgon(c);
}
PhanSo operator *(const PhanSo &a, const PhanSo &b)
{
PhanSo c;
c.iTuSo=a.iTuSo*b.iTuSo;
c.iMauSo=a.iMauSo*b.iMauSo;
return rutgon(c);
}
PhanSo operator /(const PhanSo &a, const PhanSo &b)
{
PhanSo c;
c.iTuSo=a.iTuSo*b.iMauSo;
c.iMauSo=a.iMauSo*b.iTuSo;
return rutgon(c);
}
bool operator ==(const PhanSo &a, const PhanSo &b)
{
long lMauSoQuyDong = (long)a.iMauSo * b.iMauSo;
long lTuSoQuyDongA = (long)a.iTuSo * b.iMauSo;
long lTuSoQuyDongB = (long)b.iTuSo * a.iMauSo;
if (lMauSoQuyDong > 0)
return lTuSoQuyDongA == lTuSoQuyDongB;
return 0;
}
void main()
{
PhanSo a, b, c;
cout << "Nhap tu so a = ";
cin >> a.iTuSo;
cout << "Nhap mau so a = ";
cin >> a.iMauSo;
cout << "Nhap tu so b = ";
cin >> b.iTuSo;
cout << "Nhap mau so b = ";
cin >> b.iMauSo;
cout<<"\n\n+ So sanh:\n";
if (a > b)
cout << "a lon hon b";
else
cout << "a nho hon b";
c = a + b;
cout<<"\n\n+ Phep cong:";
Xuat(c.iTuSo,c.iMauSo);
c = a - b;
cout<<"\n\n+ Phep tru:";
Xuat(c.iTuSo,c.iMauSo);
c = a * b;
cout<<"\n\n+ Phep nhan:";
Xuat(c.iTuSo,c.iMauSo);
c = a / b;
cout<<"\n\n+ Phep chia:";
Xuat(c.iTuSo,c.iMauSo);
cout<<"\n\n+ So sanh==:\n";
if (a == b)
cout << "a bang b";
else
cout << "a khac b";
}