C++: "Kür: Überladen von Operatoren"....

xenayoo

Aktives Mitglied
Thread Starter
Dabei seit
29.02.2004
Beiträge
2.126
Reaktionspunkte
6
Ich versuche mich gerade in c++ reinzuarbeiten. Dafür habe ich "Die c++ Programmiersprache" von Bjarne Stroustrup gekauft. Bei Beginn der Lektüre merkte ich schnell, dass ich auch nach dreimal Lesen eines Kapitels nur Bahnhof und Bratkartoffeln verstand. Also mußte ein Buch als Einstiegshilfe her, dass mir quasi die Verständnisgrundlagen schafft. Das Werk meiner Wahl war "Einstieg in C++" von Arnold Willemer, bekannt von "Wie werde ich Unix Guru", beide erschienen bei Galileo Computing.

Soweit die Vorgeschichte. Leider ist das Buch für Anfänger im autodidaktischem Verfahren ungeeignet, auch wenn der Autor schreibt "Keine Programmierkenntnisse erforderlich".

Zum Thema: Ich weis, was man unter dem Überladen von Funktionen versteht. Aber was versteht man unter dem Überladen von Operatoren??? Wofür wird so etwas gebraucht?

Zitat:" Viel eleganter sieht es natürlich aus, wenn man zwei Objekte vom Typ xy direkt mit dem Pluszeichen addieren kann...."

Leider kann ich damit nicht viel anfangen, zumal dann eine Liste folgt, welches Schlüsselwort mit welchen Operatoren verwendet werden kann. Noch besser ist es dann, wenn man einen Teil der Operatoren garnicht kennt und versteht.

Wer erklärt es mir?
 
da kannst du dir halt eigene operatoren definieren, z.B. statt einem normalen + für die addition machst du dir dein eigenes + das z.B. subtrahiert oder teilt oder oder...
 
Hallo,

ein gutes Beispiel für einen sinnvollen Operator ist z.B. die Implementierung eine Containers für eine verkettete Liste auf die man mittels des "[]" Operators wie auf ein Array zugreifen kann...

Gruß
Sascha
 
In der Uni mussten wir eine Klasse für Objekte vom Typ der Komplexen Zahlen zu schreiben. Für zwei Objekte dieser Klasse ist natürlich keine Addition/Subtraktion/Division/Multiplikation und Ausgabe definiert. Also mussten wir zu der Klasse Operatorüberladungen als Friendfunktionen implementieren. Und zwar mussten die Operatoren /,*,+,-,<< überladen werden, nicht nur das, die Rechenoperatoren mussten sogar mehrfach überladen werden, damit complex-Complex=Complex ,Complex-Int=Complex oder Complex-double=Complex etc funktionierten

greetz Thomas
 
Zuletzt bearbeitet:
saki schrieb:
Hallo,

ein gutes Beispiel für einen sinnvollen Operator ist z.B. die Implementierung eine Containers für eine verkettete Liste auf die man mittels des "[]" Operators wie auf ein Array zugreifen kann...

Gruß
Sascha
Was heißt "ich implementiere etwas"? Etwa: Ich baue mir Operatoren selbst?
Wenn ich also für 'new' beispielsweise den +Operator überlade, bedeutet dies, dass das Pluszeichen im Zusammenhang mit meiner Klasse anders funktioniert (wenn ich dies so programmiert habe) als wenn ich im slben Programm 1+1 rechne?
 
Du überlädst Die operatoren eigentlich dafür, daß sie auch mit Objekten deiner Klasse funktionieren, z.B. der Ausgabeoperator kann natürlich so überladen werden, damit ganze Datensätze ausgespuckt werden können obwohl nur cout << Meinobjekt; im Code steht.

greetz Thomas
 
Achso, überladen bedeutet in diesem Fall: Da Objekte häufig aus mehreren verschiedenen Variablen bestehen, die teilweise auch über Schleifen ausgelesen werden müssen, würden die Operatoren nicht funktionieren. Erst wenn ich dem System explizit mittels einer Klasse mitteile- also den Operator überlade, wie es einen Operator auf das Objekt anwenden soll, funktioniert er auch beim Objekt.
Abhänging von Meiner Programmierung könnte er - sinnloserweise - auch das Gegenteil machen. Und unabhängig von meiner Überladung funktioniert der Operator nur für die jeweilige Klasse und ihre Objekte, wie ich das programmiere, ansonsten funktioniert er wie gewohnt, richtig?
 
xenayoo schrieb:
Was heißt "ich implementiere etwas"? Etwa: Ich baue mir Operatoren selbst?
Wenn ich also für 'new' beispielsweise den +Operator überlade, bedeutet dies, dass das Pluszeichen im Zusammenhang mit meiner Klasse anders funktioniert (wenn ich dies so programmiert habe) als wenn ich im slben Programm 1+1 rechne?

Wenn Du eine komplett neue Klasse anlegst - also nicht ableitest - sind die meisten Operatoren abgesehen von new/delete noch nicht definiert - wenn Du also ein "+" ausführst weiss der Compiler gar nicht welcher Code ausgeführt werden soll. Erst wenn Du den passenden Code erstellst kannst Du "+" im Source verwenden.

Ein Objekt ist in der Regel ja ein zusammengesetzter Datentyp so das erst einmal klar sein muss wass den eine Addition <Fahrzeug> + <Fahrzeug> bedeuten soll. Der Compiler kann gar nicht wissen was gemeint ist wenn er eine solche Anweisung erhält.

"+" könnte man wohl als new missbrauchen, aus reinem Selbstschutz sollte man Operatoren aber nur mit sinnvollen Funktionen die ihrer "normalen" Verwendung zumindest ähneln versehen und nicht zu kreativ bei der Verwendung von Operatoren sein.

Gruß
Sascha
 
Aha, danke. Jetzt kann ich mir etwa vorstellen, was mir der Autor mit diesem Kapitel sagen will..... ;)
 
Zurück
Oben Unten