was macht dieser verdammte code??



  • Hallo,

    ich versuche mir gerade grundlegende kenntnisse in sachen oop anzueignen. in einem buch bin ich auf diesen code gestoßen:

    class Name
    {
        string* m_name;
    
      public:
        Name() {}
    
        Name(const Name& n)
          : m_name(new string(*n.m_name))
          {}
    
        Name (const char*s)
          : m_name(new string((s)?s:""))
          {}
    
        ~Name()
          {
          delete(m_name);
          }
    
        const char* c_str()
          {
          return (m_name->c_str());
          }
    };
    

    Was passiert beim aufruf der Methode c_str()???
    also dass sie m_name zurückgibt weiß ich, aber ich weiß nicht was passiert und warum das programm das macht. kann mir das jemand erklären?

    warum schreibt man nicht einfach

    const char* c_str()
          {
          return (m_name);
          }
    

    ??
    LG



  • Weil die Methode laut Deklaration einen char Pointer zurückgibt und keinen string Pointer.

    Die Klasse std::string hat eine Member Funktion c_str(). Die gibt einen Pointer auf den Inhalt als char Pointer zurück.

    Sonst müsstest du es so schreiben:

    const string* c_str()
          {
          return (m_name);
          }
    

    Würde man aber nicht so machen, weil der Name c_str() impliziert, dass ein char * zurückgegeben wird. Der Name wäre unpassend.

    Ich finde die Klasse Name etwas komisch, weil es meiner Meinung nach wenig Sinn macht die Membervariable zur Laufzeit mit new zu erzeugen. Man könnte auch einfach

    string m_name;
    

    als Membervar nehmen und sich das Pointergewürge ersparen.



  • aaahhhh jetzt dämmerts. ich dachte nämlich immer die methode ruft sich irgendwie rekursiv auf aber das ist ja blödsinn.

    danke jedenfalls 🙂

    und wegen den pointern da hab ich eh gesagt ich hab das beispiel 1:1 aus einem buch

    LG und danke



  • rabatz schrieb:

    ...
    und wegen den pointern da hab ich eh gesagt ich hab das beispiel 1:1 aus einem buch

    LG und danke

    Hi,

    ist das wenigstens aus einem Kapitel, das einem speziell Zeiger beibringen will ?
    Ansonsten würde ich definitv das Buch wechseln. 😉
    Wenn Du gerade am Anfang stehst, sind Pointer (und "Heapzeug") sowieso nicht das Passende....

    Gruß,

    Simon2.


Anmelden zum Antworten