|
|
Subclasses
/csbook/solutions/09/A06.cs
using System;
class Fraction {
protected int z, n;
public Fraction(int z, int n) {
this.z = z; this.n = n;
}
public static Fraction operator + (Fraction a, Fraction b) {
return new Fraction(a.z * b.n + a.n * b.z, a.n * b.n);
}
public static Fraction operator * (Fraction a, Fraction b) {
return new Fraction(a.z * b.z, a.n * b.n);
}
public override string ToString() {
return z + "/" + n;
}
}
class BetterFraction: Fraction {
public BetterFraction(int z, int n): base(z, n) {}
private int GCD(int a, int b) { // greatest common divisor of a and b
int rest = a % b;
while (rest != 0) {
a = b; b = rest; rest = a % b;
}
return b;
}
public void Reduce() {
int d = GCD(z, n);
z = z / d; n = n / d;
}
public static BetterFraction operator + (BetterFraction a, BetterFraction b) {
BetterFraction f = new BetterFraction(a.z * b.n + a.n * b.z, a.n * b.n);
f.Reduce();
return f;
}
public static BetterFraction operator * (BetterFraction a, BetterFraction b) {
BetterFraction f = new BetterFraction(a.z * b.z, a.n * b.n);
f.Reduce();
return f;
}
}
class Test {
static void Main(string[] arg) {
BetterFraction a = new BetterFraction(1, 2);
BetterFraction b = new BetterFraction(3, 4);
Console.WriteLine((a + b) + " " + a * b);
}
}
|
|