Operator überladen
-
Hallo,
ich möchte gerne folgenden Aufruf ermoeglichen:Haus A; A+(3-21);So meine Idee:
Haus operator+(const Haus &H1, Haus operator-(const int Nr_1, const int Nr_2)) { ... }doch leider findet er die programmierte Überladung nicht?
vll. rufe ich es auch falsch auf mit A+(3-21). aber auch A+3-21 geht nicht.Danke für jede Hilfe
-
Dafür reicht es wenn du den operator+ überlädst, weil die Subtraktion, ja schließlich mit natürlichen Zahlen abgewickelt wird.Fals deine subtraktion aber einen Negtive Zahl ergibt, solltest du den operator- noch mit zusätlich implementieren.
-
Dafür reicht es wenn du den operator+ überlädst, weil die Subtraktion, ja schließlich mit natürlichen Zahlen abgewickelt wird.Fals deine subtraktion aber einen Negtive Zahl ergibt, solltest du den operator- noch mit zusätlich implementieren.
Danke für deine schnelle Antwort, aber in dem Abschnitt:
operator-(const int Nr_1, const int Nr_2)möchte ich keine Subtraktion erreichen.
Ich möchte quasi. alle Häuser zwischen Nr_1 und Nr_2 setzen. Nr_1 und Nr_2 dienen sozusagen als Start- und Endwert.
Seblst wenn es andere Lösungsansätze gibt, interessiert es mich, wie die oben programmierte Überladung aufzurufen ist

Danke
-
die oben programmierte Überladung geht so nciht, ich denk ma, die kompiliert auch so nicht...
Also so geht das nicht.Wenn du dein Verhalten erreichen willst, musst du über expression templates gehen (eine Möglichkeit). dies ist jedoch ein ziemlich kompliziertes Thema, aber wenn du willst, kannst das ja ma in google eingeben.
-
die oben programmierte Überladung geht so nciht, ich denk ma, die kompiliert auch so nicht...
Also so geht das nicht.Wenn du dein Verhalten erreichen willst, musst du über expression templates gehen (eine Möglichkeit). dies ist jedoch ein ziemlich kompliziertes Thema, aber wenn du willst, kannst das ja ma in google eingeben.
Also er nimmt das schon hin, aber wenn ich es dann versuche aufzurufen, findet er den Operator nicht. Auf die Idee bin ich durch diese Seite hier gekommen: http://public.tfh-berlin.de/~kempfer/skript_cpp/Kap11.html
da ist gleich am Anfang eine Tabelle mit Operatoraufrufen und deren Notation zu sehen. In der Letzten Zeile der Tabelle ist folgendes zu finden:
-(a + b * 3) mit der Notation operator- (operator+ (a, operator* (b, 3)))daher müsste sowas gehen?
Schöne Grüße
-
Le0nidas schrieb:
In der Letzten Zeile der Tabelle ist folgendes zu finden:
-(a + b * 3) mit der Notation operator- (operator+ (a, operator* (b, 3)))daher müsste sowas gehen?
Schau dir es nochmal genau an. Jeder operator+*- nimmt nur 2 Parameter...
Ergo: das was du machen willst ist 1) fragwürdig und 2) nur mit expression templates lösbar.
Du kannst nämlich keinen operator+ mit 3 parametern definieren und auch einen operator+(int,int) darfst du nicht selber definieren...
-
Le0nidas schrieb:
...
da ist gleich am Anfang eine Tabelle mit Operatoraufrufen und deren Notation zu sehen. In der Letzten Zeile der Tabelle ist folgendes zu finden:
-(a + b * 3) mit der Notation operator- (operator+ (a, operator* (b, 3)))daher müsste sowas gehen?
Da hat der Skripteschreiber nur zusammengestellt, welche Operatoren verwendet werden. Diese werden aber in Reihenfolge, nicht in Kombination ausgewertet.
Davon abgesehen finde ich deine Notation auch nicht wirklich lesbar. Operatorüberladungen können die Lesbarkeit in manchen Bereichen erhöhen (gerade wenn sie wie in der Mathematik üblich verwendet werden), in anderen Bereichen sind sprechende Methoden um Klassen besser.
-
Da hat der Skripteschreiber nur zusammengestellt, welche Operatoren verwendet werden. Diese werden aber in Reihenfolge, nicht in Kombination ausgewertet.
Schau dir es nochmal genau an. Jeder operator+*- nimmt nur 2 Parameter...
Ergo: das was du machen willst ist 1) fragwürdig und 2) nur mit expression templates lösbar.
Du kannst nämlich keinen operator+ mit 3 parametern definieren und auch einen operator+(int,int) darfst du nicht selber definieren...
Stimmt!
Danke euch für die Aufklärung!
-
Hier würde ich auch zu einer Methode raten, das ist wohl das naheliegendste.
Ausserdem, wer "setzt" Häuser? Wohl kaum das Haus selbst. Also entweder eine eigene Klasse oder freie Funktion dafür einrichten oder notfalls eine statische Memberfunktion der Haus-Klasse verwenden.
Dann hast du beispielsweise als freie Funktion:
void SetzeHäuser(int Erstes, int Letztes);Wobei du noch überlegen solltest, ob das Letzte dazugehört oder wie bei den Iterator-Ranges von der Menge ausgeschlossen ist.