Wenn fertig, bitte Fenster schließen
// Lösung zum überladenen Konstruktor // Dateien einbinden #include <iostream> #include <cstring> using std::cout; using std::endl; // Klassendefinition class CString { char *pString; // String short stringNum; // akt. String-Nummer static short count; // laufende String-Nummer public: // ctor CString(); CString(const char *const psT); CString(const CString& source); // dtor ~CString(); // String setzen void SetString(const char *const pS); void SetString(const CString& source); // Strings addieren void AddString(const char *const pS); void AddString(const CString& add); // String ausgeben void Print() const; }; // Statische Eigenschaft definieren! short CString::count; // Definition der Memberfunktionen // 1. Konstruktor CString::CString() { // char-Feld mit einem Element anlegen pString = new char[1]; // String als leeren String kennzeichnen pString[0] = 0; // Stringzähler erhöhen count++; // Und aktuelle Nummer merken stringNum = count; } // 2. Konstruktor CString::CString(const char *const pS) { // Speicherplatz für String anfordern // Die abschliessende binäre 0 dabei nicht vergessen! pString = new char[strlen(pS)+1]; // String umkopieren strcpy(pString,pS); // Stringzähler erhöhen count++; // Und aktuelle Nummer merken stringNum = count; } // 3. Konstruktor (Kopierkonstruktor) CString::CString(const CString& source) { // Gleicher Ablauf wie beim vorherigen ctor pString = new char[strlen(source.pString)+1]; strcpy(pString,source.pString); count++; stringNum = count; } // Destruktor CString::~CString() { // Speicher für char-Feld freigeben! delete [] pString; count--; } // Legt den über den char-Zeiger übergebenen String ab void CString::SetString(const char *const pS) { // Zuerst alten Speicherplatz freigeben! delete [] pString; // Nun neuen Speicherplatz für String anfordern // Die abschliessende binäre 0 dabei nicht vergessen! pString = new char[strlen(pS)+1]; // String umkopieren strcpy(pString,pS); } // Legt den über die String-Referenz übergebenen String ab void CString::SetString(const CString& source) { // Gleicher Ablauf wie bei der vorherigen Memberfunktion delete [] pString; pString = new char[strlen(source.pString)+1]; strcpy(pString,source.pString); } // Fügt den über den char-Zeiger übergebenen String hinzu void CString::AddString(const char *const pS) { char *pTemp; // Hilfszeiger // Zuerst Speicher für neuen String reservieren pTemp = new char[strlen(pString)+strlen(pS)+1]; // Dann den ursprünglichen String umkopieren strcpy(pTemp,pString); // und nun den neuen String hinzufügen strcat(pTemp,pS); // Jetzt erst den ursprünglichen Speicher freigeben delete [] pString; // und Zeiger auf neuen Speicherbereich setzen pString = pTemp; } // Fügt den über die String-Referenz übergebenen String hinzu void CString::AddString(const CString& add) { char *pTemp; // Hilfszeiger // Gleicher Ablauf wie vorherige Memberfunktion pTemp = new char[strlen(pString)+strlen(add.pString)+1]; strcpy(pTemp,pString); strcat(pTemp,add.pString); // Jetzt erst den ursprünglichen Speicher freigeben delete [] pString; // und Zeiger auf neuen Speicherbereich setzen pString = pTemp; } // Ausgabe des Strings void CString::Print() const { cout << stringNum << ".String: " << pString << endl; } // main() Funktion int main() { // Zwei String Objekte definieren CString myString1("Es waren "); CString myString2; // Beide Strings ausgeben cout << "\nAusgangs-Strings\n"; myString1.Print(); myString2.Print(); // Zum ersten String Objekt char-String hinzufügen myString1.AddString("zwei Ameisen"); // Zum zweiten String Objekte char-String hinzufügen myString2.AddString("die wollten nach Amerika reisen"); // Beide Strings ausgeben cout << "\nNach AddString(...)\n"; myString1.Print(); myString2.Print(); // Neuen String definieren und mit dem ersten // CString Objekt initialisieren CString myString3(myString1); // Zeilenvorschub in String einfügen myString3.AddString("\n"); // und zweites String Objekt hinzufügen myString3.AddString(myString2); // Neues String Objekt jetzt ausgeben cout << "\nNeuer String\n"; myString3.Print(); } |