Minh họa cách cài đặt operator overloading trong C++


#include<iostream>
#include<math.h>
using namespace std;
struct PS
{
    int tu;
    int mau;
};
//operator overloading doi toan tu <<
ostream & operator<<(ostream &os, PS p)
{
    os<<p.tu<<"/"<<p.mau<<endl;
    return os;
}
//operator overloading doi toan tu >>
istream & operator>>(istream &is, PS &p)
{
    cout<<"Tu va mau:";
    is>>p.tu>>p.mau;
    return is;
}
int UCLN(int a, int b)
{
    a=abs(a);
    b=abs(b);
    while(a!=b)
    {
        if(a>b)
            a=a-b;
        else
            b=b-a;
    }
    return a;
}
void rutgon(PS &p)
{
    int c=UCLN(p.tu,p.mau);
    p.tu=p.tu/c;
    p.mau=p.mau/c;
}
//operator overloading doi toan tu +
PS operator+(PS p1, PS p2)
{
    PS p;
    p.tu = p1.tu*p2.mau + p2.tu*p1.mau;
    p.mau = p1.mau * p2.mau;
    rutgon(p);
    return p;
}
//operator overloading doi toan tu -
PS operator-(PS p1, PS p2)
{
    PS p;
    p.tu = p1.tu*p2.mau - p2.tu*p1.mau;
    p.mau = p1.mau * p2.mau;
    rutgon(p);
    return p;
}
int main()
{
    PS p1,p2,p3,p4,p;
    cout<<"Nhap p1,p1:\n";
    cin>>p1>>p2>>p3>>p4;
    p = (p1 + p2)-(p3-p4);
    cout<<p;
    return 0;
}

Trương Đình Huy