Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Operator überladen ( MyStr = "Hallo " + "Welt"; )

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
04.04.2005, 13:31 Uhr
~Der String Gast
Gast


Hallo!

Ich bastele gerade an einer String Klasse um das Fremdwort(für mich) operator etwas zu ergründen.

Ich habe folgendes:

C++:
// zuweisungs operator =
CStr & operator=(const char* Tmp);
// zuweisungs operator +=
CStr & operator+=(const char* );

// Jetzt kann ich fehler frei das machen
MyStr = "Hallo ";
//bzw.
MyStr += "Welt";

// Das aber nicht
MyStr = "Hallo "+ "Welt";
//bzw.
MyStr += "Hallo "+ "Welt";



Wie muss jetzt der operator= (bzw +=) überladen werden das ich n viele const char* ´s aneinander hängen kann?

Danke!


Bearbeitung von Windalf:

smilies deaktiviert...


Dieser Post wurde am 04.04.2005 um 13:41 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
04.04.2005, 13:41 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


zeig mal bitt deine Klasse die du geschrieben hast dazu...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
04.04.2005, 14:32 Uhr
Th



Du kannst nur Operatoren überladen, die mindestens eine eigene Klasse als Parameter haben, d.h. den Standard-Operator "operator + (const char *, const char *) kannst du NICHT überladen.
Du mußt folgendes schreiben:

C++:
MyStr = CStr("Hallo ") + "Welt";

// oder alternativ
CStr MyStr = "Hallo ";
MyStr += "Welt";

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
04.04.2005, 15:10 Uhr
~Der String Gast
Gast


@TH:
Deine zweite altarnative habe ich bis jetzt auch genutzt aber sie gefällt mir nicht.
Die erste ist natürlich möglich.

@Windalf:
Ich habe drei Klassen eine Converter Klasse, ich denke die ist hier nicht Interessant. Aber hier die anderen beiden.

C++:
class CStringBase  
{
public:
    CStringBase();
    virtual ~CStringBase();

    // Letztes Zeichen Loeschen
    void    DeleteLast();
    // Ab Pos  n * Zeichen Loeschen
    void    Delete(UINT Pos, UINT n);
    // Alle Zeichen Loeschen
    void    Delete();
    // Zeiger auf String Buffer[Pos]
    char*    GetBuffer(UINT Pos = 0);
    // Text Einfügen
    void    Insert(UINT Pos, const char* Text);

    // Zeiger auf den String
    const char* GetString();
    // Länge des Strings (ohne NULL)
    UINT GetLength();

protected:
    // (protected) Text am Ende des Strings anhängen
    void Add(const char* Text);

    // (protected) s1 < s2 ret(-1)        s1 > s2 ret(1)        s1 == s2 ret(0)
    static int compares(const char* s1, const char* s2);

    //  (protected) Länge von Text (ohne NULL)
    static UINT ZaehleText(const char* Text);
    // (protected) Neuen Text Setzen
    void SetText(const char* Text);

    // (protected) Zeiger auf den String
    char* m_cpBuffer;
    // (protected) Länge des Strings (ohne NULL)
    UINT m_iLength;

};

class CStr : public CStringConvert  
{
public:

    // Default Construction
    CStr();
    // Construction
    CStr(const char* Tmp);

    // Destruction
    virtual ~CStr();

    // zuweisungs operator =
    CStr & operator=(const char* Tmp);
    // zuweisungs operator +=
    CStr & operator+=(const char* );

    // return operator  const char* (return String)
    operator const char*()const{return m_cpBuffer;}
    // return operator UINT (return String Länge)
    operator UINT()const{return m_iLength;}

    // vergleichs operator
    BOOL operator<(const char* Tmp);
    // vergleichs operator
    BOOL operator>(const char* Tmp);
    // vergleichs operator
    BOOL operator==(const char* Tmp);
    // vergleichs operator
    BOOL operator!=(const char* Tmp);
    // vergleichs operator
    BOOL operator<=(const char* Tmp);
    // vergleichs operator
    BOOL operator>=(const char* Tmp);

};

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
04.04.2005, 17:50 Uhr
Th



Die 2. Alternative ist aber häufig effizienter, da sie keine temporären Objekte im Speicher erzeugt (wie bei der ersten)...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
05.04.2005, 17:39 Uhr
~Der String Gast
Gast


Naja Danke erstmal!

Da muss ich nur so viel schreiben.

MFG
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: