Commit afdd8e1c authored by Uwe Wienkop's avatar Uwe Wienkop
Browse files

2020-06-30a

parent 70d6b2b4
using System;
using System.Runtime.CompilerServices;
namespace _01OperatorOverloading
{
......@@ -42,15 +43,33 @@ namespace _01OperatorOverloading
// nur wenn b1.z == b2.z ist, wird b1.n == b2.n ausgeführt
public static bool operator !=(Bruch b1, Bruch b2)
=> !(b1 == b2);
public static Bruch operator <<(Bruch b, int x) => new Bruch(b.z * x, b.n * x);
public static Bruch operator >>(Bruch b, int x) => new Bruch(b.z / x, b.n / x);
// Konvertierungsoperatoren:
public static explicit operator int(Bruch b)
=> b.z / b.n;
public static implicit operator double(Bruch b)
public static explicit operator double(Bruch b)
=> (double)b.z / (double)b.n;
public static implicit operator Bruch(int zahl)
=> new Bruch(zahl);
// Überladung unärer Operatoren:
public static Bruch operator +(Bruch b) => b;
public static Bruch operator -(Bruch b) => new Bruch(-b.z, b.n);
// ACHTUNG: Nur EINE Inkrement-/Dekrement- Implementierung angeben!
// Post- oder Pre-Inkrement/Dekrement werden vom Compiler generiert!
// Die folgenden beiden Zeilen sind also falsch!
//public static Bruch operator ++(Bruch b) { b.z += b.n; return b; }
//public static Bruch operator --(Bruch b) { b.z -= b.n; return b; }
// !!! So geht es richtig:
public static Bruch operator ++(Bruch b) { return new Bruch(b.z + b.n, b.n); }
public static Bruch operator --(Bruch b) { return new Bruch(b.z - b.n, b.n); }
public override string ToString() => $"{z} / {n}";
}
......@@ -83,19 +102,30 @@ namespace _01OperatorOverloading
int k2 = 3 * (int)4.5;
int k = (int)e3; // explizite Konvertierung
double d = e3; // implizite Konvertierung
double d = (double) e3;
Console.WriteLine(k);
Console.WriteLine(d);
double d2 = (int)34;
int k3 = (int)3.5;
Bruch b4 = new Bruch(2, 5); // b4: neuer Speicher #100000
Bruch b5 = new Bruch(2, 5); // b5: neuer Speicher #200000
Bruch b4 = new Bruch(2, 5); // b4: neuer Speicher #100.000
Bruch b5 = new Bruch(2, 5); // b5: neuer Speicher #200.000
if (b4 == b5)
Console.WriteLine("Sind gleich");
else
Console.WriteLine("Sind unterschiedlich");
Bruch b6 = new Bruch(1, 2);
Console.WriteLine(b6++);
Console.WriteLine(++b6);
int x = 55;
Console.WriteLine(x++);
Console.WriteLine(++x);
Bruch b7 = new Bruch(1, 3);
Console.WriteLine(b7 << 2);
}
}
}
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment