#include <iostream>

using namespace std;

class Rat{
public:
    int numer;
    int denom;
    Rat(int num = 0, int den = 1): numer(num), denom(den){cout << "ctor\n";}
    ~Rat(){cout << "dtor\n";}
    Rat(const Rat&);

    //alternate styles of return value. DO NOT ALTER THESE.
    Rat& operator=(const Rat& rhs);
    friend Rat operator+(const Rat& lhs, const Rat& rhs);
    friend const Rat& operator-(const Rat& lhs, const Rat& rhs);
    friend Rat* operator*(const Rat& lhs, const Rat& rhs);
    friend ostream& operator<<(ostream& o, Rat& rhs);
};


int main(){

    Rat a(3,2);
    Rat b(5);

    Rat c = a;
    cout << c << endl;
    c = a + b;
    cout << c << endl;
    Rat d = 6 + c;
    cout << d << endl;
    Rat e = 2;
    cout << e << endl;

    const Rat* rp =  &(d - e);
    cout << "in main, address of result of - is: " << rp << endl;

    Rat* f = 2 * e;

    return 0;
}

