using System; namespace _01OperatorOverloading { class Bruch { private int z, n; public Bruch(int Z, int N = 1) { z = Z; if (N == 0) throw new ArgumentNullException("Nenner darf nicht 0 sein!"); n = N; } public Bruch(string t) { string[] d = t.Split('/'); z = Convert.ToInt32(d[0]); n = Convert.ToInt32(d[1]); } public static Bruch Mult1(Bruch b1, Bruch b2) { int zaehler = b1.z * b2.z; int nenner = b1.n * b2.n; //b1.z = zaehler; //b1.n = nenner; Bruch erg = new Bruch(zaehler, nenner); return erg; } public static Bruch Mult2(Bruch b1, Bruch b2) { return new Bruch(b1.z * b2.z, b1.n * b2.n); } public static Bruch Mult(Bruch b1, Bruch b2) => new Bruch(b1.z * b2.z, b1.n * b2.n); public static Bruch operator *(Bruch b1, Bruch b2) => new Bruch(b1.z * b2.z, b1.n * b2.n); public static explicit operator int(Bruch b) => b.z / b.n; public static implicit operator double(Bruch b) => (double)b.z / (double)b.n; public static implicit operator Bruch(int zahl) => new Bruch(zahl); } class Program { static void Main(string[] args) { Bruch b1 = new Bruch(2, 3); Bruch b2 = new Bruch(2); Bruch b3 = new Bruch("3/4"); // Bruch e1 = 3.Mult(b1); Bruch e2 = Bruch.Mult(b1, b2); Bruch e3 = b1 * b2; Bruch e4 = b1 * 2; Bruch e5 = 2 * b1; // 2 --> impl.Konv. in einen Bruch // op* (Bruch, Bruch) int k = (int)e3; // explizite Konvertierung double d = e3; // implizite Konvertierung Console.WriteLine(k); Console.WriteLine(d); double d2 = 34; int k2 = (int)3.5; } } }