diff --git a/.vs/prog2-ss2022-wienkop/DesignTimeBuild/.dtbcache.v2 b/.vs/prog2-ss2022-wienkop/DesignTimeBuild/.dtbcache.v2 index 69ddbc9a5ab067d4c75f2e2b6620755ac60ebbc0..a1f9e0db2f1e0a894065144a04c7b760cb0297a3 100644 Binary files a/.vs/prog2-ss2022-wienkop/DesignTimeBuild/.dtbcache.v2 and b/.vs/prog2-ss2022-wienkop/DesignTimeBuild/.dtbcache.v2 differ diff --git a/.vs/prog2-ss2022-wienkop/v16/.suo b/.vs/prog2-ss2022-wienkop/v16/.suo index 1827a8351b095887e3746e1efd985d892c4c6bd6..8648814a0fc2f0e5ff0aab6b9900ef243d0ecb50 100644 Binary files a/.vs/prog2-ss2022-wienkop/v16/.suo and b/.vs/prog2-ss2022-wienkop/v16/.suo differ diff --git a/02 OperatorUeberladgBrueche/Bruch.cs b/02 OperatorUeberladgBrueche/Bruch.cs index 4ecb68c87978d08e45b95b1c2cbf570a56390128..ec78a97508027d41ac1836231cd8402eff983e9a 100644 --- a/02 OperatorUeberladgBrueche/Bruch.cs +++ b/02 OperatorUeberladgBrueche/Bruch.cs @@ -20,7 +20,7 @@ namespace _02_OperatorUeberladgBrueche } public override string ToString() => $"{z}/{n}"; - #region Operatoren + #region Binäre Operatoren public void Mult_V1(Bruch b2) { z = z * b2.z; @@ -32,6 +32,7 @@ namespace _02_OperatorUeberladgBrueche } public Bruch Mult_V3(Bruch b2) => new Bruch(z * b2.z, n * b2.n); public static Bruch operator *(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.n + b2.z * b1.n, b1.n * b2.n); //public static Bruch operator *(Bruch b1, int k) => new Bruch(b1.z * k, b1.n); //public static Bruch operator *(int k, Bruch b1) => new Bruch(b1.z * k, b1.n); #endregion @@ -40,8 +41,41 @@ namespace _02_OperatorUeberladgBrueche public static implicit operator Bruch(int k) => new Bruch(k); // Konvertiert einen Int in einen Bruch public static explicit operator int(Bruch b) => b.z/b.n; - // Konvertiert einen Bruch in einen int + // Konvertiert einen Bruch in einen int. Da ein Genauigkeitsverlust + // möglich ist: explicit public static implicit operator Bruch(string s) => new Bruch(s); #endregion + + #region Unäre Operatoren + public static Bruch operator +(Bruch b) => b; + public static Bruch operator -(Bruch b) => new Bruch(-b.z, b.n); + + // x = 5; cw(x++)--> cw(x); x=x+1 , cw(++x) --> x=x+1;cw(x) + // b1++ 3/2++ --> 5/2 + // Compiler generiert selbstätig die entsprechende Codeanordnung + public static Bruch operator ++(Bruch b) => new Bruch(b.z + b.n, b.n); + public static Bruch operator --(Bruch b) => new Bruch(b.z - b.n, b.n); + #endregion + + #region Vergleichsoperatoren + public static bool operator ==(Bruch b1, Bruch b2) => b1.z == b2.z && b1.n == b2.n; + public static bool operator !=(Bruch b1, Bruch b2) => !(b1 == b2); + public override bool Equals(object obj) + { + if (obj == null) + return false; + if (this.GetType() != obj.GetType()) + return false; + + return this == (Bruch)obj; + } + public override int GetHashCode() + { + return z.GetHashCode() ^ n.GetHashCode(); + } + + public static bool operator true(Bruch b) => b.n != 1; + public static bool operator false(Bruch b) => b.n == 1; + #endregion } } diff --git a/02 OperatorUeberladgBrueche/Program.cs b/02 OperatorUeberladgBrueche/Program.cs index 754c1c4f23f3cf247c8dc9f57842421c01b2c97f..e6c23398babd890f2834fee227eb37fddc4c0ea7 100644 --- a/02 OperatorUeberladgBrueche/Program.cs +++ b/02 OperatorUeberladgBrueche/Program.cs @@ -22,14 +22,27 @@ namespace _02_OperatorUeberladgBrueche Bruch b4 = b1 * b2; Console.WriteLine(b4); - Bruch b5 = b1 * 2; + Bruch b5 = b1 * 2 + b4 * 1; Bruch b6 = 2 * b1; double x = 3.14; int k4 = (int) x; k4 = (int) b6; - Bruch b8 = (Bruch) "3/4" * "1/2"; + Bruch b8 = b1 * "1/2"; + Bruch b9 = +b8; + Bruch b10 = -b8; + + Bruch b11 = new Bruch(1, 2); // Speicher: #100.000 + Bruch b12 = new Bruch(1, 2); // Speicher: #200.000 + + if (b11 == b12) + Console.WriteLine("Die Brüche sind gleich!"); + else + Console.WriteLine("Die Brüche sind ungleich!"); + + if (b11) + Console.WriteLine("Der Bruch ist ein echter Bruch"); } } } diff --git a/02 OperatorUeberladgBrueche/bin/Debug/netcoreapp3.1/02 OperatorUeberladgBrueche.dll b/02 OperatorUeberladgBrueche/bin/Debug/netcoreapp3.1/02 OperatorUeberladgBrueche.dll index 63aa879c4044ebec743ca234e1777b194807f926..8ae4cab72ae3410b175ed9d2670860428eb4c86a 100644 Binary files a/02 OperatorUeberladgBrueche/bin/Debug/netcoreapp3.1/02 OperatorUeberladgBrueche.dll and b/02 OperatorUeberladgBrueche/bin/Debug/netcoreapp3.1/02 OperatorUeberladgBrueche.dll differ diff --git a/02 OperatorUeberladgBrueche/bin/Debug/netcoreapp3.1/02 OperatorUeberladgBrueche.pdb b/02 OperatorUeberladgBrueche/bin/Debug/netcoreapp3.1/02 OperatorUeberladgBrueche.pdb index ffc4a3c3946ec2d5d679a96674d36ee6c477dfc9..b1ec2343b2a2bca4bab1a6bf00b8304020f6247c 100644 Binary files a/02 OperatorUeberladgBrueche/bin/Debug/netcoreapp3.1/02 OperatorUeberladgBrueche.pdb and b/02 OperatorUeberladgBrueche/bin/Debug/netcoreapp3.1/02 OperatorUeberladgBrueche.pdb differ diff --git a/02 OperatorUeberladgBrueche/obj/Debug/netcoreapp3.1/02 OperatorUeberladgBrueche.dll b/02 OperatorUeberladgBrueche/obj/Debug/netcoreapp3.1/02 OperatorUeberladgBrueche.dll index 63aa879c4044ebec743ca234e1777b194807f926..8ae4cab72ae3410b175ed9d2670860428eb4c86a 100644 Binary files a/02 OperatorUeberladgBrueche/obj/Debug/netcoreapp3.1/02 OperatorUeberladgBrueche.dll and b/02 OperatorUeberladgBrueche/obj/Debug/netcoreapp3.1/02 OperatorUeberladgBrueche.dll differ diff --git a/02 OperatorUeberladgBrueche/obj/Debug/netcoreapp3.1/02 OperatorUeberladgBrueche.pdb b/02 OperatorUeberladgBrueche/obj/Debug/netcoreapp3.1/02 OperatorUeberladgBrueche.pdb index ffc4a3c3946ec2d5d679a96674d36ee6c477dfc9..b1ec2343b2a2bca4bab1a6bf00b8304020f6247c 100644 Binary files a/02 OperatorUeberladgBrueche/obj/Debug/netcoreapp3.1/02 OperatorUeberladgBrueche.pdb and b/02 OperatorUeberladgBrueche/obj/Debug/netcoreapp3.1/02 OperatorUeberladgBrueche.pdb differ