diff --git a/01OperatorOverloading/Program.cs b/01OperatorOverloading/Program.cs index 09b53b36268ddd7e9d153cdff1b902588dcf40f5..60cceb6f03a883369260ffc330a3b5325e52138c 100644 --- a/01OperatorOverloading/Program.cs +++ b/01OperatorOverloading/Program.cs @@ -18,6 +18,7 @@ namespace _01OperatorOverloading z = Convert.ToInt32(d[0]); n = Convert.ToInt32(d[1]); } + public static Bruch Mult1(Bruch b1, Bruch b2) { int zaehler = b1.z * b2.z; @@ -36,7 +37,13 @@ namespace _01OperatorOverloading => 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 bool operator ==(Bruch b1, Bruch b2) + => b1.z == b2.z && b1.n == b2.n; + // nur wenn b1.z == b2.z ist, wird b1.n == b2.n ausgeführt + public static bool operator !=(Bruch b1, Bruch b2) + => !(b1 == b2); + // Konvertierungsoperatoren: public static explicit operator int(Bruch b) => b.z / b.n; public static implicit operator double(Bruch b) @@ -56,21 +63,39 @@ namespace _01OperatorOverloading Bruch b2 = new Bruch(2); Bruch b3 = new Bruch("3/4"); - // Bruch e1 = 3.Mult(b1); + // Bruch e1 = b1.Mult(b2); // wäre möglich + // Bruch e1 = b1.Mult(2); // ist möglich + // Bruch e1 = 3.Mult(b1); // ist nicht möglich, da 3 vom Typ int und nicht Bruch ist Bruch e2 = Bruch.Mult(b1, b2); + //Bruch e2 = Bruch.Mult(2, b2); // nicht nötig, über Konv.Op. erledigt + //Bruch e2 = Bruch.Mult(b1, 2); // nicht nötig, über Konv.Op. erledigt + Bruch e3 = b1 * b2; Bruch e4 = b1 * 2; Bruch e5 = 2 * b1; - // 2 --> impl.Konv. in einen Bruch + // Wir haben Bruch.operator*(Bruch, Bruch) + // int.op*, double.op*, Bruch.op* + // Bruch.op*(Bruch, Bruch) + // int->Bruch, Bruch ??? + // 2 --> impl.Konv. --> Bruch // op* (Bruch, Bruch) + // double.op*(int, double) --> double.op*(int-->double, double) + int k2 = 3 * (int)4.5; 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; + 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 + if (b4 == b5) + Console.WriteLine("Sind gleich"); + else + Console.WriteLine("Sind unterschiedlich"); } } } diff --git a/01OperatorOverloading/bin/Debug/netcoreapp3.1/01OperatorOverloading.dll b/01OperatorOverloading/bin/Debug/netcoreapp3.1/01OperatorOverloading.dll index 61099dcfb380c6cc2391b5da4516af1a1e851c2d..90b1a1dab779649819240de9fdcfabd6da019354 100644 Binary files a/01OperatorOverloading/bin/Debug/netcoreapp3.1/01OperatorOverloading.dll and b/01OperatorOverloading/bin/Debug/netcoreapp3.1/01OperatorOverloading.dll differ diff --git a/01OperatorOverloading/bin/Debug/netcoreapp3.1/01OperatorOverloading.pdb b/01OperatorOverloading/bin/Debug/netcoreapp3.1/01OperatorOverloading.pdb index 022adbfc64d245ff81d5d78f99ed7c7ad46569b1..d2d877b01bcc299fa8c169e49914aab4b16a5ac5 100644 Binary files a/01OperatorOverloading/bin/Debug/netcoreapp3.1/01OperatorOverloading.pdb and b/01OperatorOverloading/bin/Debug/netcoreapp3.1/01OperatorOverloading.pdb differ diff --git a/01OperatorOverloading/obj/Debug/netcoreapp3.1/01OperatorOverloading.csprojAssemblyReference.cache b/01OperatorOverloading/obj/Debug/netcoreapp3.1/01OperatorOverloading.csprojAssemblyReference.cache index 75c16613d637ba1aee3feac158410536d13849e8..e84921a470a178d6c34a6d16975b66db84b52171 100644 Binary files a/01OperatorOverloading/obj/Debug/netcoreapp3.1/01OperatorOverloading.csprojAssemblyReference.cache and b/01OperatorOverloading/obj/Debug/netcoreapp3.1/01OperatorOverloading.csprojAssemblyReference.cache differ diff --git a/01OperatorOverloading/obj/Debug/netcoreapp3.1/01OperatorOverloading.dll b/01OperatorOverloading/obj/Debug/netcoreapp3.1/01OperatorOverloading.dll index 61099dcfb380c6cc2391b5da4516af1a1e851c2d..90b1a1dab779649819240de9fdcfabd6da019354 100644 Binary files a/01OperatorOverloading/obj/Debug/netcoreapp3.1/01OperatorOverloading.dll and b/01OperatorOverloading/obj/Debug/netcoreapp3.1/01OperatorOverloading.dll differ diff --git a/01OperatorOverloading/obj/Debug/netcoreapp3.1/01OperatorOverloading.pdb b/01OperatorOverloading/obj/Debug/netcoreapp3.1/01OperatorOverloading.pdb index 022adbfc64d245ff81d5d78f99ed7c7ad46569b1..d2d877b01bcc299fa8c169e49914aab4b16a5ac5 100644 Binary files a/01OperatorOverloading/obj/Debug/netcoreapp3.1/01OperatorOverloading.pdb and b/01OperatorOverloading/obj/Debug/netcoreapp3.1/01OperatorOverloading.pdb differ diff --git a/01OperatorTrueFalse/Program.cs b/01OperatorTrueFalse/Program.cs index d369133113685e13d01d078be7da112fbb9b08f9..1baa42c2938a584380cb62fb28ad450f53a4fd48 100644 --- a/01OperatorTrueFalse/Program.cs +++ b/01OperatorTrueFalse/Program.cs @@ -37,6 +37,8 @@ namespace _01OperatorTrueFalse public static bool operator !=(LaunchStatus x, LaunchStatus y) => !(x == y); public override bool Equals(object obj) => obj is LaunchStatus other && this == other; + // Equals testet, ob ein hier: Launchstatus-Obj. gleich einem anderen OBJEKT ist + // Dies setzt gleiche Typen und gleiche Inhalte voraus! public override int GetHashCode() => status; } @@ -49,11 +51,16 @@ namespace _01OperatorTrueFalse // Überladung von true und false. Daher wird GetNavigationLaunchStatus nur aufgerufen, // wenn GetFuelLauchStatus gleich true ist! LaunchStatus okToLaunch1 = GetFuelLaunchStatus() && GetNavigationLaunchStatus(); + // GetFuelLauchStatus() --> LaunchStatus ---(op true)--> bool + // Wenn true --> GetNavigationLaunchStatus() --> LaunschStatus ---(op true)--> bool + // GetFuelLaunchStatus() & GetNavigationLaunchStatus(); --- Einfaches & Console.WriteLine("----------------"); LaunchStatus okToLaunch2 = GetFuelLaunchStatus() & GetNavigationLaunchStatus(); // Nochmals: Durch das überladene true ist der nachfolgende Ausdruck zulässig! Console.WriteLine("----------------"); Console.WriteLine(okToLaunch1 ? "Ready to go!" : "Wait!"); + // okToLaunch1 ---(op true)--> bool + //if (okToLaunch1.Equals(okToLaunch2)) } static LaunchStatus GetFuelLaunchStatus()