+ operator überladen



  • hi ich möchte den + operator überladen:
    so sieht meine klasse aus:

    #ifndef pc_h
    #define pc_h pc_h
    #include<iostream>
    
    class pc{
    public:
        pc();
        int hdda() const {return hdd;}; 
        int mhza() const {return mhz;};
        void hddf(int a) {hdd=a;}; 
        void mhzf(int a) {mhz=a;};
        pc& operator+=(pc&);
    private:
        int hdd,mhz;
    };
    std::ostream& operator<<(std::ostream&, const pc& comp);
    pc operator+(const pc&, const pc&);
    pc operator*(const pc&, const pc&);
    #endif
    

    den operator überlade ich so:

    pc operator+(const pc& pc1, const pc& pc2) {
        pc ergebnis;
        ergebnis.hddf(pc1.hdda() + pc2.hdda());
        ergebnis.mhzf(pc1.mhza() + pc2.mhza());
        cout<<"+ Operator erfolgreich aufgerufen!\n";
        return ergebnis;
    }
    

    wenn ich nun im main 3 ojekte a b c erstelle und
    c=a+b schreibe funktioniert er auchsuper.
    warum geht aber die schreibweise:
    c=a.operator+(b) nicht ???
    thx andi



  • Weil der Operator keine Memberfunktion ist. Probier mal c = operator+(a, b)



  • das funktioniert!
    wie müsste ich die zeile in der klasse umschreiben damit
    c=a.operator+(b) auch funktioniert?
    andi



  • lass den einen paramtert weg! und benutze anstelle von pc1.hdda einfach hdda

    [EDIT] und mache es natuerlich zu einer memberfunktion

    [ Dieser Beitrag wurde am 09.07.2003 um 11:22 Uhr von Mirauder_Mo editiert. ]



  • was stört dich denn daran, dass du nicht a.operator+(b); schreiben kannst? Weil eigentlich sollte man den operator+ nicht als Member implementieren, was du aber machen müsstest wenn du a.operator+(b) schreiben willst



  • Original erstellt von kingruedi:
    Weil eigentlich sollte man den operator+ nicht als Member implementieren, [...]

    warum eigentlich nicht? wenn ich A A::operator+(const A& rhs) implementieren will?

    Bei A A::operator+(const B& rhs) ist's klar, wenn + kommutativ sein soll.

    [edit] smileys aus [/edit]

    [ Dieser Beitrag wurde am 09.07.2003 um 18:18 Uhr von bja editiert. ]



  • @Mirauder_Mo:
    bloedsinn. op+ soll kein member sein.

    @bja:
    wegen der konsistenz.

    angenommen du implementierst den operator+(Klasse,Klasse) als member. das macht ja nix, da es trotzdem funktioniert.

    nun willst du aber auch den operator+ fuer Klasse2 anbieten:

    operator+(Klasse,Klasse2) kann aber kein member sein (bzw. macht es keinen sinn ihn als member zu haben)

    nun hast du 1 operator+ als member und 1 als funktion.
    das finde ich irgendwie verwirrend - es ist besser gleiches zusammenzutun...



  • @Shade Of Mine:
    hey, wenn du mir bloedsinn an den kopf schmeist, dann fuehl ich mich angegriffen.

    und da die frage war, wie man das hinbekommt, das es auf die eine weise funktioniert ist meine antwort kein bloedsinn.

    das es nicht die bessere variante ist will ich nicht bestreiten.



  • Original erstellt von Mirauder_Mo:
    hey, wenn du mir bloedsinn an den kopf schmeist, dann fuehl ich mich angegriffen.

    op+ soll kein member sein.
    da ist der vorschlag ihn zu einem member zu machen nicht gut.

    sicher, es waere moeglich, aber nicht alles was moeglich ist, ist gut.

    das ist kein persoenlicher angriff, sondern rein sachlich festgestellt.


Anmelden zum Antworten