Klassen und Rückgabewerte von Methoden



  • Hallo,

    ich habe ein relativ allgemeines Problem zu Klassen und Methoden. Nehmen wir an, ich hätte folgende Klasse (is nur als Beispiel):

    class myclass {
    private: char var1[30];
    char var2[3];

    public: char get_var1();
    };

    var1 ist mit irgend einem Text gefüllt und nun soll mittels get_var1() einen Pointer auf den String an das eigentliche Hauptprogramm zurückgeben:

    int main () {
    char *ptr = get_var1();
    (irgendwie so)

    };

    Nur wie muss dazu die Implementation aussehen? Kennt jemand ne gute Seite mit Tutorials zu diesem Thema oder einem Weg wie man das Problem anders lösen kann??

    Bin für jede Hilfe dankbar.



  • man sollte keine Pointer auf interne Daten zurückgeben!



  • wnn du von dem char* nur lesen willst, dann nimm einen zeiger auf const char!
    und wenn du darau zugreifen wills, ohne eine instanz der klasse zu haben, dann musst du alles static machen.

    class bar {
       static const char *foo;
    public:
       static const char *get_foo() { return foo; }
    };
    
    const char *
    bar::foo = "Hello World";
    
    //willst du lesen und schreiben?
    #include <cstring>
    class bar2 {
       static char *foo;
    public:
       static const char *get_foo () { return foo; }
       static void set_foo (const char *neu) { 
          delete [] foo; foo = new char[strlen(neu)+1];
          strcpy (foo, neu);
       }    
    };
    
    char *
    bar2::foo = 0; //=0 ist nicht explizit nötig afair
    
    //oder willst du mit instanzen arbeiten?
    class instanz_demo {
       char *foo;
    public:
       instanz_demo (const char *c) : foo(new char[strlen(c)+1]) { strcpy(foo,c); }
       instanz_demo () : foo(0) {}
       ~instanz_demo () { delete [] foo; }
       const char *get_foo () const { return foo; }
       void set_foo (const char *c) { delete [] foo; foo = new char[strlen(c)+1]; strcpy(foo,c); }
    };
    
    int main () { 
        bar2::set_foo("Hello World!"); //bar2::foo muss erst mit etwas gefüllt werden
        cout << bar::get_foo() << '\n'
             << bar2::get_foo() << '\n';
    
        //aber:
        instanz_demo instanz; //erzeuge eine instanz von instanz_demo!
        instanz.set_foo ("Hello World!");
    
        //und:
        instanz_demo andere("Hello World (andere Instanz)"); //erzeugt eine ANDERE instanz von instanz_demo
    
         cout << instanz.get_foo() << " versus " << andere.get_foo() << '\n';
    }
    

    Eine Klasse ist nur eine Schablone, du musst erst eine Instanz erzeugen, um mit 'ihr' arbeiten zu können, oder du machst die Methoden static



  • Danke für die schnelle Antwort, das ist genau das was ich gesucht habe. 🙂


Anmelden zum Antworten