Entwickler-Ecke
Basistechnologien - Operator überschreiben
FelixD - Fr 14.01.11 16:07
Titel: Operator überschreiben
Hallo, ich möchte in einer Klasse modint, welche das Rechnen modulo einer Primzahl p wiedergeben soll, den % überschreiben. Der Grund ist, dass dieser auch negative Werte zurück geben kann (z.b. -3 % 2 = -1 statt -3 % 2 = 1).
Nun stehe ich vor folgender Frage: Ich möchte im Body des neuen % Operators den ursprünglichen % Operator verwenden. Ist das möglich und wenn ja wie?
lg Felix
Edit:
Eigentlich weiß ich nicht mal ob man einen Operator lokal überschreiben kann und wie das geht ?
Th69 - Fr 14.01.11 16:18
s.
Operator (C# Referenz) [
http://msdn.microsoft.com/de-de/library/s53ehcz3.aspx], nur daß du "Fraction" durch deine eigene Klasse "ModInt" (Klassennamen bitte immer mit Großbuchstabe am Anfang!) ersetzen mußt und dann eben '%' als Operator überlädst.
Intern kannst du dann bei zwei Int-Werten selbstverständlich darauf dann den eingebauten % Operator anwenden.
FelixD - Fr 14.01.11 16:28
Ja ich hab den Klassennamen schon bevor du mir geantwortet hast umgeschrieben, weil mir diese Konvention eingefallen ist ;)
Was in diesem Artikel gezeigt wird kenne ich schon. Ich will keinen Operator für zwei ModInts schreiben, sondern wircklich
lokal den vorimplementierten Modulo-Operator für ints überschreiben, wobei ich eben zum implementieren des neuen Operators auf den Alten Operator zurückgreifen will. So z.b.:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| static ModInt operator % (int n, int p) { n=n%p; if(n<0) { n= p+n; } return n; } |
Also sinngemäß so, den in der vorliegenden Form wird es wahrscheinlich eine Endlosschleife. Oder funktioniert überhaupt nicht ...
FelixD - Fr 14.01.11 16:44
Aso, naja ist auch nicht allzu tragisch, wäre nur irgendwie schön gewesen ...
Danke für die Hilfe!
Yogu - Fr 14.01.11 22:33
FelixD hat folgendes geschrieben : |
| wäre nur irgendwie schön gewesen ... |
Meinst du wirklich? Wenn jemand dann deine Bibliothek einbindet, ändert sich plötzlich das Verhalten eines Systemoperators - glaubst du nicht, dass das für maßlose Verwirrung sorgen würde? Das ist es ja gerade, was C# ausmacht: Dass (möglichst) nichts unerwartetes passiert.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!