/* rational numbers in C++ */ using namespace std; #include // interface: class rational { private: int num; int dem; int gcd(int a, int b) {if (a==0) return b; else return gcd(b%a,a);} public: rational(int n, int d); // constructor ~rational(); // destructor void invert(); int equals(rational* other); // rational equality void multx(rational* b); // destructive multiplication rational* mult(rational* b); // constructive multiplication void print(); }; // implementation: rational::rational(int n, int d) // constructor { int g; num = n; if (d!=0) dem = d; else dem = 1; g = gcd(num,dem); num = num/g; dem = dem/g; } rational::~rational() {} // destructor void rational::invert() { if (num==0) return; int temp; temp = num; num = dem; dem = temp; } int rational::equals(rational* other) { return num*other->dem == dem*other->num; } void rational::multx(rational* b) { num = num*b->num; dem = dem*b->dem; } rational* rational::mult(rational* b) { return new rational(num*b->num, dem*b->dem); } void rational::print() { cout << num << "/" << dem; } int main() { rational *a, *b; a = new rational(1,2); b = new rational(2,4); cout << a->equals(b) << endl; a->multx(b); b = a->mult(b); a->print(); cout << endl; b->print(); cout << endl; }