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

Dieses Thema im Forum "Mac OS X Entwickler, Programmierer" wurde erstellt von xenayoo, 11.08.2005.

  1. xenayoo

    xenayoo Thread Starter MacUser Mitglied

    Beiträge:
    2.110
    Zustimmungen:
    6
    MacUser seit:
    29.02.2004
    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?
     
  2. oneOeight

    oneOeight MacUser Mitglied

    Beiträge:
    46.830
    Zustimmungen:
    3.633
    MacUser seit:
    23.11.2004
    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...
     
  3. saki

    saki MacUser Mitglied

    Beiträge:
    335
    Zustimmungen:
    2
    MacUser seit:
    10.09.2004
    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
     
  4. sir.hacks.alot

    sir.hacks.alot MacUser Mitglied

    Beiträge:
    2.406
    Zustimmungen:
    113
    MacUser seit:
    10.03.2005
    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: 11.08.2005
  5. xenayoo

    xenayoo Thread Starter MacUser Mitglied

    Beiträge:
    2.110
    Zustimmungen:
    6
    MacUser seit:
    29.02.2004
    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?
     
  6. sir.hacks.alot

    sir.hacks.alot MacUser Mitglied

    Beiträge:
    2.406
    Zustimmungen:
    113
    MacUser seit:
    10.03.2005
    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
     
  7. xenayoo

    xenayoo Thread Starter MacUser Mitglied

    Beiträge:
    2.110
    Zustimmungen:
    6
    MacUser seit:
    29.02.2004
    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?
     
  8. saki

    saki MacUser Mitglied

    Beiträge:
    335
    Zustimmungen:
    2
    MacUser seit:
    10.09.2004
    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
     
  9. xenayoo

    xenayoo Thread Starter MacUser Mitglied

    Beiträge:
    2.110
    Zustimmungen:
    6
    MacUser seit:
    29.02.2004
    Aha, danke. Jetzt kann ich mir etwa vorstellen, was mir der Autor mit diesem Kapitel sagen will..... ;)
     
Die Seite wird geladen...