cpp: Eigene String-Klasse

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • cpp: Eigene String-Klasse

      Quellcode

      1. class string {
      2. public:
      3. string();
      4. ~string();
      5. string& operator=(const string &);
      6. string& operator=(const char[]);
      7. private:
      8. char *itsChar;
      9. int itsSize;
      10. };
      11. string::string():
      12. itsChar(0),itsSize(0)
      13. { }
      14. string::~string() {
      15. if (!itsChar == 0)
      16. delete [] itsChar;
      17. }
      18. string& string::operator=(const string &rhs) {
      19. itsSize = rhs.itsSize;
      20. if (!itsChar == 0)
      21. delete [] itsChar;
      22. itsChar = new char[itsSize];
      23. *itsChar = rhs.*itsChar;
      24. return *this;
      25. }
      26. string& string::operator=(const char str[]) {
      27. itsSize = sizeof(str);
      28. if (!itsChar == 0)
      29. delete [] itsChar;
      30. itsChar = new char[itsSize];
      31. *itsChar = str;
      32. return *this;
      33. }
      Alles anzeigen


      Ich versuche mir grade selber eine String-Klasse zu schreiben. Allerdings habe ich zwei Probleme, bei denen ich nicht weiß, was daran falsch ist. Mein Kompiler gibt folgende Fehler aus:

      Quellcode

      1. strings.cpp: In member function 'string& string::operator=(const string&)':
      2. strings.cpp:26: error: '((string*)this)->string::itsChar' cannot be used as a member pointer, since it is of type 'char*'
      3. strings.cpp: In member function 'string& string::operator=(const char*)':
      4. strings.cpp:35: error: invalid conversion from 'const char*' to 'char'
      theharlekin.de

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von stanny ()

    • Mh. Ich weiss gerad nicht so richtig was ich damit anfangen soll. Ich muss leider wieder lernen, aber hier mal ein Gegenentwurf, der zwar compiliert aber nur Schwachsinn liefert:

      Ich hoff das hier answers.com/topic/const-correctness kann dir weiterhelfen, ich verwende bei mir auch ziemlich komische Dinge. Alles in allem keine gute Idee. Das Gespiele mit Pointern mochte ich noch nie :(
      Dateien
      • test.cpp

        (858 Byte, 925 mal heruntergeladen, zuletzt: )
    • Frueher[tm] war es mal so, dass die Hauptfunktion durchaus void zurueckgegeben hat.
      Das war philosophisch! Jetzt muss leider ein Status zurueckgegeben werden :(

      Stanny meint, damit koenne er dynamische Strings erstellen. Das ist aber imho Unsinn, weil z.B. die Klasse String afaik bereits einen += Operator mitbringt.
    • In C darfst du das zumindest bei gcc schon noch. Ich habs ja immer gesagt: C++ ist böse :D
      Ne, bin einfach noch nicht dazu gekommen, es zu lernen.
      Allerdings ist C mit Strings schon ziemlich a pain in the a**, Delphi will mich immer davon abhalten, das zu tun, was ich tun muss und kriegt spastische Anfälle, wenn ich mehr als 4 Schleifen ineinander schachtel oder so...
      Ich überlege nur noch, ob ich statt C++ nicht lieber irgendwas Richtung Perl, Python oder so.
      Aber egal, ich hab eh schon zu wenig Zeit und außerdem ist es OT
      Greatness, at any cost.
    • Laut Buch, was eigentlich nicht _so_ alt sein sollte, sollte man sich eine eigene String-Klasse schreiben, da die Standard-Library angeblich keine dynamischen Strings zulasse. Will heißen +=-Operator oder generell die Tatsache, dass immer nur so viel Speicher reserviert wird, wie gebraucht wird, nicht vorhanden sein.

      Ob das nun stimmt oder nicht, sei mal dahingestellt (es hat mich auch sehr gewundert!), allerdings würde ich trotzdem gerne in der Lage sein. Mit MODs Beispiel kann ich nicht so viel Anfangen, da die Funktion verloren geht. Ich habe es zwar nur überflogen, aber statt neue Wertzuweisungen einzurichten, dürften da massig Speicherlücken hervorgerufen werden. (Ich hab allerdings noch nicht die Zeit gefunden, da wirklich einen Blick raufzuwerfen.)

      Schon einmal danke und ich melde mich nochmal mit konkreterer Problembeschreibung.
      theharlekin.de