Konstruktoren, Destruktoren und überladene Operatoren



  • Hallo !

    ich sollte für eine Übung folgendes Beispiel machen - die Übungsleiterin ist da aber sehr weit übers Ziel hinausgeschossen und keiner weiß worums eigentlich geht 🙂

    Programmieren Sie nach folgender Definition:

    class Name {
    
    private: char *name;
    
    public: Name(void);
    		Name(char*);
    		Name(const Name&);
    		~Name();
    		const Name &operator=(const Name&);
    		const Name &operator=(char*);
    		char &operator[](unsigned int);
    		friend ostream &operator<<(ostream&, const Name&);
    		friend istream &operator>>(istream&, Name&);
    }
    

    Was heißt denn Name& ?
    Was sollte da programmiert werden ?
    Wo werden da Operatoren überladen ?

    Fragen über Fragen 😕 🙄 😕 🙄



  • Name& bedeutet, dass eine Referenz auf eine Variable vom Typ Name vorliegt. Les dir dazu am besten mal ein Tutorial-Kapitel über Referenzen durch...

    Programmiert wird halt eine Namenklasse, die zugegebnermaßen nicht sehr sinnvoll ist, aber halt auch nur als Lernbeispiel gedacht. Diese Klasse soll alle Funktionalität anbieten, um mit einem Namen zu arbeiten. Die Klasse arbeitet intern mit einem C-String und stellt nach außen fünf überladene Operatoren bereit.

    Und das hier sind die überladenen Operatoren:

    const Name &operator=(const Name&);
    const Name &operator=(char*);
    char &operator[](unsigned int);
    friend ostream &operator<<(ostream&, const Name&);
    friend istream &operator>>(istream&, Name&);
    

    Für genaueres sei wieder auf ein gutes Tutorial verwiesen. Da wirst du auch ein Kapitel über überladene Operatoren finden...

    Hoffe, das hilft dir fürs erste 😉

    Mfg, smasher1985



  • ja, jetzt weiß ich wenigstens in etwa wo ich nachschaun kann - unter welchem Stichwort 😃

    danke



  • ich versuch jetzt dauernd den ersten void-Konstruktor zu implementieren

    dazu hab ich die Angabe in ein eigenes Header File gegeben

    das header-file importier ich in ein Source - File das so aussieht:

    #include <stdio.h>
    #include <iostream.h>
    #include "B2Header.h"
    
    Name::Name(void){
    cout << "aa";
    }
    

    Ich erhalte abber IMMER diesen Fehler:

    error C2143: Syntaxfehler : Fehlendes ';' vor 'PCH creation point'



  • ja, Klassendeklarartionen müssen mit ; abgeschlossen werden also

    class Name {
       // ...
    };
    

    Dann wirds funktionieren...

    Mfg, smasher1985



  • erstmal schönen Dank für den Super Support 👍

    vielleicht weißt duch auch noch wie ich hier den Namen rausbekomme - dann geb ich auch schon Ruhe für heute :D:D

    Name::Name(const Name&){
    	name= ? ? ?
    }
    

    lG
    Pallandor



  • Pallandor schrieb:

    erstmal schönen Dank für den Super Support 👍

    vielleicht weißt duch auch noch wie ich hier den Namen rausbekomme - dann geb ich auch schon Ruhe für heute :D:D

    Name::Name(const Name&){
    	name= ? ? ?
    }
    

    lG
    Pallandor

    Name::Name(const Name& n) {
       name = new char[strlen(n.name)+1];
       strcpy(name, n.name);
    }
    


  • Perfekt - schönen Dank und noch ein schönes wochenende !!!! 🕶


Anmelden zum Antworten