Operatoren überladen



  • Hallo, ich kapier nicht wie und warum man Operatoren überlädt. Kann mir das jemand erklären? Hier ist ein Programmcode;Kann den mir jemand auch erklären??? Was bedeutet eigentlich compl& a? Ist das dasselbe wie compl &a?
    MFG Toddy

    [cpp]#include <iostream>
    using namespace std;

    class compl
    {
    public:
    float re, im;
    compl (float r=0, float i=0) {re=r; im=i;}
    friend float real(compl& a) {return a.re}
    friend float imag(compl& a) {return a.im}
    };

    istream& operator>>(istream& in_s, compl& in_z)
    {
    float re=0, im=0;
    char zeich=0;
    in_s>>zwixh;
    if (zeich == '(')
    {
    in_s>>



  • Hi!

    Das compl& a gibt als Parameter eine Referenz auf ein Objekt vom Typ compl an, also deine Klasse. Sollte aber lieber const compl& a sein, in dem Fall.

    Einen Operator überlädst du immer wie folgt:

    Global:
    Rückgabetyp operatorTatsächlicheroperator(Parameter1, Parameter2);

    Lokal:
    Rückgabetyp operatorTatsächlicheroperator(Parameter1);

    grüße



  • Dass man eine Konstante zurueckgibt liegt doch daran, dass man sie danach nicht mehr ändern kann, oder?
    Da ist es jetzt ja egal, aber z.B. bei Klassen, wenn man eine nichtkonstante Referenz auf eine Mitgliedsvariable zurückgibt, kann man die Variable auch über die nichtkonstante Referenz ändern?



  • Ja. Drum gibt man, sollte das ändern verboten werden, eine Konstante referenz zurück. Zum Teil sogar konstante Objektkopien (keine Referenzen).

    Zum Beispiel:

    const compl operator+( const compl& lhs, const compl& rhs )
    {}
    


  • Was issn

    compl
    

    für ein (Compiler-Abhängiges-)Schlüsswort ???



  • Ich bezog mich auf die Klasse vom Threadersteller:

    class compl
    


  • David_pb schrieb:

    Ich bezog mich auf die Klasse vom Threadersteller:

    class compl
    

    und ich glaube, dass KasF sich darüber gewunder hat, dass compl da "ge-syntax-ge-highlighted" ist. 😉

    Verstehe ich aber auch nicht.

    Gruß,

    Simon2.



  • In der tat... 😮 Ist mir garnich aufgefallen! 😉

    Compl ist ein Alternativer Token für ~. Steht im Standard unter §2.5.2.



  • weil compl nen reserviertes keyword ist ^^ für den komplement-operator ~



  • David_pb schrieb:

    Compl ist ein Alternativer Token für ~. Steht im Standard unter §2.5.2.

    Thx, einige kannte ich ja noch gar nicht 🙂


Anmelden zum Antworten