Operator überladen
-
Hallo,
1)in unseren Folien zur Vorlesung steht, dass man in C++ Operatoren überladen kann.
Kann ich dann zB + durch - überladen, dass also 5+5 = 0 ergibt? oder kann man Operatoren nur spezifisch für Klassen überladen, sodass die neue Definition des Operators nur für die Objekte eine Klasse gelten.
2)Kann ein überladener Operator auch mehr als nur 1 Parameter entgegen nehmen?
Wenn nämlich die Operatoren nur in Bezug auf Klassen gelten, ist ja ein Parameter einer binären Operation durch die Klasse selbst belegt?Danke schon mal
-
-
du kannst nur neue Operatoren definieren, sprich: welche die es noch nicht gibt. int+int gibt es schon. Das geht nicht. foo+int kannst du dagegen selber definieren.
-
du kannst nur vorhandene Operator-Arten definieren. Ein unaeres % geht zB nicht. ein unaeres - gibt es aber.
Bei
-foo
ist der eine Parameter natuerlich foo selber.
-
-
invoices schrieb:
Hallo,
1)in unseren Folien zur Vorlesung steht, dass man in C++ Operatoren überladen kann.
Kann ich dann zB + durch - überladen, dass also 5+5 = 0 ergibt? oder kann man Operatoren nur spezifisch für Klassen überladen, sodass die neue Definition des Operators nur für die Objekte eine Klasse gelten.Mindestens einer der beteiligten Parameter muss ein eigener Datentyp sein.
2)Kann ein überladener Operator auch mehr als nur 1 Parameter entgegen nehmen?
Wenn nämlich die Operatoren nur in Bezug auf Klassen gelten, ist ja ein Parameter einer binären Operation durch die Klasse selbst belegt?Genau. Der andere (bei binären Operatoren) ist frei wählbar.
-
invoices schrieb:
1)in unseren Folien zur Vorlesung steht, dass man in C++ Operatoren überladen kann.
Kann ich dann zB + durch - überladen, dass also 5+5 = 0 ergibt? oder kann man Operatoren nur spezifisch für Klassen überladen, sodass die neue Definition des Operators nur für die Objekte eine Klasse gelten.Überladungen gehen nur wenn mindestens ein Argument kein eingebauter Typ ist, d.h. man kann bestehende Operatoren nicht verändern.
2)Kann ein überladener Operator auch mehr als nur 1 Parameter entgegen nehmen?
Wenn nämlich die Operatoren nur in Bezug auf Klassen gelten, ist ja ein Parameter einer binären Operation durch die Klasse selbst belegt?Jein. Man kann die meisten binären Operatoren als freie Funktionen überladen, so dass sie zwei Argumente erhalten. Du kannst aber nicht einem Operator mehr Argumente verpassen als die normale Sprachsyntax erlaubt.
Mehr zur Operatorüberladung findest du in den entsprechenden Artikeln im Magazin: http://magazin.c-plusplus.net/artikel/�berladung von Operatoren in CPlusPlus (Teil 1)
-
Beispiel zu 5+5=0:
class my_int { int x; public: my_int(int i) : x(i) {} int operator+(int y) { return x - y; } }; int main() { my_int a(5); int b = a + 5; std::cout<<b; // b = 0 }
-
NEO.PIXEL schrieb:
Beispiel zu 5+5=0:
Das ist aber nicht 5+5 sondern my_int(5)+5 - 5+5 ergibt immernoch 10, das kannste dem Compiler auch nicht austreiben
