// const and static methods

#include <iostream>
#include <string>
#include <sstream>
using namespace std;

class rat {
public:
    rat() : num(0), den(1) {
        count++;
    }
    rat(int n, int d) : num(n), den(d) {
        count++;
    }

    // Here, const means that the object won't be modified
    string toString() const;
    rat multiply(rat r) const;
    void assign(int n, int d);
    static int getObjectCount();
private:
    int num;
    int den;
    static int count;
};

string rat::toString() const {
    ostringstream oss;
    oss << num << '/' << den;
    return oss.str();
}

rat rat::multiply(rat r) const {
    return rat(num * r.num, den * r.den);
}

void rat::assign(int n, int d) {
    num = n;
    den = d;
}

int rat::count = 0;

int rat::getObjectCount() {
    return count;
}

int main() {
    rat onehalf(1, 2);
    rat threefourths(3, 4);
    rat product = onehalf.multiply(threefourths);

    cout << onehalf.toString() << endl;
    cout << product.toString() << endl;
    cout << rat::getObjectCount() << endl;
}
