Benutzerdefinierte Klasse string (C++)

Ich versuche zu schreiben, meine eigenen C++ - Klasse "String" für die Bildungs-und müssen-Zwecke.

Die erste Sache ist, dass ich nicht weiß, dass viel über die Betreiber, und das ist, warum ich will, Sie zu erlernen.
Ich begann zu schreiben, meine Klasse, aber wenn ich es ausführen, es blockiert das Programm, aber kein Absturz.

Werfen Sie einen Blick auf den folgenden code bitte vor dem Lesen weitere:

class CString
{
private:
  char* cstr;
public:
  CString();
  CString(char* str);
  CString(CString& str);
  ~CString();

  operator char*();
  operator const char*();
  CString operator+(const CString& q)const;
     CString operator=(const CString& q);
};

Zunächst bin ich mir nicht so sicher, ich erklärte alles richtig. Ich habe versucht, googleing über Sie, aber alle die tutorials zu überladen erklären der basic-ideea ist sehr einfach, aber fehlen, um zu erklären, wie und Wann jedes Ding genannt wird. Zum Beispiel in meinem operator = ruft das Programm CString(CString& str); aber ich habe keine ideea, warum.

Ich habe auch an der cpp-Datei unter:

CString::CString()
{
 cstr=0;
}
CString::CString(char *str)
{
 cstr=new char[strlen(str)];
 strcpy(cstr,str);
}
CString::CString(CString& q)
{
 if(this==&q)
  return;
 cstr = new char[strlen(q.cstr)+1];
 strcpy(cstr,q.cstr);
}
CString::~CString()
{
 if(cstr)
  delete[] cstr;
}
CString::operator char*()
{
 return cstr;
}
CString::operator const char* ()
{
 return cstr;
}
CString CString::operator +(const CString &q) const
{
 CString s;
 s.cstr = new char[strlen(cstr)+strlen(q.cstr)+1];
 strcpy(s.cstr,cstr);
 strcat(s.cstr,q.cstr);
 return s;
}
CString CString::operator =(const CString &q)
{
 if(this!=&q)
 {
  if(cstr)
   delete[] cstr;
  cstr = new char[strlen(q.cstr)+1];
  strcpy(cstr,q.cstr);
 }
 return *this;
}

Zum testen habe ich eine code genauso einfach, wie das

CString a = CString("Hallo") + CString(" Welt");

printf(a);

Ich habe versucht zu Debuggen, aber an einem Punkt bekomme ich verloren. Zuerst ruft er den Konstruktor 2 mal für "Hallo" und "Welt". Dann ist es in der + - operator ist in Ordnung. Dann ruft er den Konstruktor für den leeren string. Nach, dass es in "CString(CString& str)" und jetzt bin ich verloren. Warum ist das passiert? Danach habe ich bemerkt, dass mein string "Hallo Welt" ist im Destruktor (ein paar mal in eine Zeile). Wieder bin ich sehr puzzeled. Nach der Konvertierung wieder von char* Cstring und hin und her und es hält. Es ist nie zu bekommen ist, in der = - operator ist aber auch nicht weiter gehen. printf () wird nie erreicht.

Ich benutze VisualStudio 2010 für diese, aber es ist im Grunde nur standard-c++ - code und ich glaube nicht, dass es machen sollte, dass viel von einem Unterschied

Ich verstehe die Bildungs -, aber was ist mit dem "müssen" Zweck? Sie nicht wie die standard std::string?
Ehrlich gesagt, Nein. Ich Träume von code, smart und einfach zu bedienen. Betrachten CPlusplus.com ich bemerkte, std::string kann nicht etwas tun, so: string a = string("Hallo") + string(" Welt") oder string-a = String("Hallo")+ "Welt", weil es fehlt das + - überladung. Und mehr auf, dass ist, dass ich viel Arbeit mit strings-in diesem Teil von meinem Projekt und daher lieber eine zu haben, die hat alle Funktionen, die ich will und wie ich will. Ich hoffe, ich werde nicht frawned auf, das zu sagen.
Was Sie wirklich nicht können, ist : str3 = "qwe" + "rty"; In der standard-operator+ ist eine Globale Funktion für strings. Für mich ist das ein Anfängerfehler, neu zu definieren, einen std::string nur, weil Sie wollen, dass es Ihre Art und Weise und nicht, dass es einen spezifischen Bedarf.
(und Sie haben nicht einmal versucht, und sehen, dass das, was Sie wollen, ist tatsächlich möglich, mit der standard)

InformationsquelleAutor Sanctus2099 | 2010-05-16

Schreibe einen Kommentar