#include<iostream>
#include<cassert>
using namespace std;
//分数类
class Fraction{
private:
int num;
int den;
public:
Fraction(int n = 0, int d = 1){
assert(d != 0);
num = n;
den = d;
}
Fraction operator+(const Fraction& rhs);//加法重载
Fraction& operator++();//前置++
Fraction operator++(int);//后置++
friend ostream& operator<<(ostream& os, const Fraction& rhs);//<<友元重载
};
//小数类
class Decimal{
private:
double data;
public:
Decimal(double d = 0):data(d){}
Decimal operator+(const Decimal& rhs);
Decimal& operator++();
Decimal operator++(int);
friend ostream& operator<<(ostream& os, const Decimal& rhs);
};
//Fraction类的<<友元重载
ostream& operator<<(ostream& os, const Fraction& rhs){
os << rhs.num << "/" << rhs.den << endl;
return os;
}
Fraction Fraction::operator+(const Fraction& rhs){
Fraction temp;
temp.num = num * rhs.den + den * rhs.num;
temp.den = den * rhs.den;
return temp;
}
Fraction& Fraction::operator++(){
num = num;
return *this;
}
Fraction Fraction::operator++(int){
Fraction temp(*this);
num = num + den;
return temp;
}
Decimal Decimal::operator+(const Decimal& rhs){
return Decimal(rhs.data + data);
}
Decimal& Decimal::operator++(){
data=data;
return *this;
}
Decimal Decimal::operator++(int){
Decimal temp(*this);
data += 1;
return temp;
}
ostream& operator<<(ostream& os, const Decimal& rhs){
os << rhs.data << endl;
return os;
}
int main(){
Fraction a(1, 2);
cout << "a: " << a;
cout << "a++: " << a++;
cout << "++a: " << ++a;
Fraction b(2, 3);
cout << "a+b: " << a + b;
Decimal c(1.2);
cout << "c: " << c;
cout << "c++: " << c++;
cout << "++c: " << ++c;
Decimal d(1.3);
cout << "d+d: " << c + d;
return 0;
}