#include<iostream>
using namespace std;
class Rational
{
private:
int numerator;
int denominator;
public:
Rational(int n, int d) :numerator(n), denominator(d){}
//乘法操作符既可以使用成员重载又可以使用友元重载的
/*
friend Rational operator *(const Rational &l, const Rational &r)
{
return Rational((l.numerator*r.numerator) , (l.denominator*r.denominator));
}
*/
const Rational operator *(const Rational &r)
{
return Rational((this->numerator*r.numerator), (this->denominator*r.denominator));
}
//输入输出的操作符只能使用友元重载
friend ostream & operator<<(ostream &o, Rational & r)
{
o << r.numerator << "/" << r.denominator << endl;
return o;
}
//修改了对象r,故用const修饰是错误的,会导致重载失败
/*
friend istream & operator>>(istream &i, const Rational & r)
{
char c;
i >> r.numerator >> c >> r.denominator;
return i;
}
*/
friend istream &operator>>(istream &i, Rational &r)
{
char c;
i >> r.numerator >> c >> r.denominator;
return i;
}
};
int main()
{
Rational r1(1, 2);
Rational r2(3, 5);
Rational res = r1*r2;
cout << "r1:" << r1 << "r2:" << r2;
cout << "r1*r2=" << res << endl;
cin >> r1 >> r2;
cout << "r1:" << r1 << "r2:" << r2;
res = r1*r2;
cout << res << endl;
return 0;
}