<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Tips für weitere Funktionen in eigener String-Klasse]]></title><description><![CDATA[<p>Könntet ihr mir tipps geben für weitere Funktionen in meiner eigenen String-klasse?</p>
<p>Bis jetzt habe ich:</p>
<pre><code class="language-cpp">#ifndef STRINGCLASS_H
#define STRINGCLASS_H

#include&lt;iostream&gt;

class Stringclass
{
    friend std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, const Stringclass&amp; sc);
    friend std::istream&amp; operator&gt;&gt;(std::istream&amp; is, Stringclass&amp; sc);
    protected:
        char *string;               //Funktion und Variablen sind für den Anwender
        int size;                   //nicht erreichbar, können aber vererbt werden
        void scnew(int new_size);   //und so benutzt werden.
    public:
        //Konstruktor und Destruktor für Stringclass
        Stringclass();
        ~Stringclass();
        //Operator sind immer für char* und Stringclass überladen
        Stringclass&amp; operator=(const char *c);
        Stringclass&amp; operator=(const Stringclass &amp;sc);
        Stringclass&amp; operator+(const char *c);
        Stringclass&amp; operator+(const Stringclass &amp;sc);
        Stringclass&amp; operator+=(const char *c);
        Stringclass&amp; operator+=(const Stringclass &amp;sc);
        bool operator==(const char* c);
        bool operator==(const Stringclass&amp; sc);
        bool operator!=(const char* c);
        bool operator!=(const Stringclass&amp; sc);
        bool operator&lt; (const char* c);         //gibt true zurück wenn das erste abweichende Zeichen
        bool operator&lt; (const Stringclass&amp; sc); //kleiner ist als das andere zeichen
        bool operator&lt;=(const char* c);         //kleiner oder gleich
        bool operator&lt;=(const Stringclass&amp; sc);
        bool operator&gt; (const char* c);         //größer
        bool operator&gt; (const Stringclass&amp; sc);
        bool operator&gt;=(const char* c);         //größer oder gleich
        bool operator&gt;=(const Stringclass&amp; sc);
        //Funktionen zum bearbeiten von Strings
        Stringclass&amp; reverse();					//dreht die Stringclass um
        bool replace(int index, const char c);
        bool replace(int index, int length, const char *c);
        bool replace(int index, int length, const Stringclass&amp; sc);
        bool insert(int index, const char *c);
        bool insert(int index, const Stringclass&amp; sc);
        bool cut(int index, int length);
        void clear();                                //löscht ganzer String
        void erase(int index);                       //löscht ab index
        //Sonstige Funktionen
        int length();
        int find(const char c, int start = 0);            //suchen in einer Stringclass entweder einen
        int find(const char *c, int start = 0);           //String, eine Stringclass oder ein Zeichen
        int find(const Stringclass&amp; sc, int start = 0);   //optionaler parameter definiert den anfang zum suchen
        int compareto(const Stringclass&amp; sc);           // index der ersten verschiedenen Zeichen
        char* to_char();
};

#endif
</code></pre>
<p>So das habe ich bis jetzt.</p>
<p><strong>Ich möchte jetzt auch keinen Code von euch, sondern nur weitere Funktionen, die eventuell nützlich wären.</strong></p>
<p>Außerdem, da ich noh ziemlich neu in C++ bin, könntet ihr mir ja mal sagen wie ihr den code bis jetzt findet von der qualität her.</p>
<p>Danke schon mal im Voraus</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/218022/tips-für-weitere-funktionen-in-eigener-string-klasse</link><generator>RSS for Node</generator><lastBuildDate>Fri, 09 Oct 2026 04:36:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/218022.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 14 Jul 2008 21:53:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Tips für weitere Funktionen in eigener String-Klasse on Mon, 14 Jul 2008 21:53:40 GMT]]></title><description><![CDATA[<p>Könntet ihr mir tipps geben für weitere Funktionen in meiner eigenen String-klasse?</p>
<p>Bis jetzt habe ich:</p>
<pre><code class="language-cpp">#ifndef STRINGCLASS_H
#define STRINGCLASS_H

#include&lt;iostream&gt;

class Stringclass
{
    friend std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, const Stringclass&amp; sc);
    friend std::istream&amp; operator&gt;&gt;(std::istream&amp; is, Stringclass&amp; sc);
    protected:
        char *string;               //Funktion und Variablen sind für den Anwender
        int size;                   //nicht erreichbar, können aber vererbt werden
        void scnew(int new_size);   //und so benutzt werden.
    public:
        //Konstruktor und Destruktor für Stringclass
        Stringclass();
        ~Stringclass();
        //Operator sind immer für char* und Stringclass überladen
        Stringclass&amp; operator=(const char *c);
        Stringclass&amp; operator=(const Stringclass &amp;sc);
        Stringclass&amp; operator+(const char *c);
        Stringclass&amp; operator+(const Stringclass &amp;sc);
        Stringclass&amp; operator+=(const char *c);
        Stringclass&amp; operator+=(const Stringclass &amp;sc);
        bool operator==(const char* c);
        bool operator==(const Stringclass&amp; sc);
        bool operator!=(const char* c);
        bool operator!=(const Stringclass&amp; sc);
        bool operator&lt; (const char* c);         //gibt true zurück wenn das erste abweichende Zeichen
        bool operator&lt; (const Stringclass&amp; sc); //kleiner ist als das andere zeichen
        bool operator&lt;=(const char* c);         //kleiner oder gleich
        bool operator&lt;=(const Stringclass&amp; sc);
        bool operator&gt; (const char* c);         //größer
        bool operator&gt; (const Stringclass&amp; sc);
        bool operator&gt;=(const char* c);         //größer oder gleich
        bool operator&gt;=(const Stringclass&amp; sc);
        //Funktionen zum bearbeiten von Strings
        Stringclass&amp; reverse();					//dreht die Stringclass um
        bool replace(int index, const char c);
        bool replace(int index, int length, const char *c);
        bool replace(int index, int length, const Stringclass&amp; sc);
        bool insert(int index, const char *c);
        bool insert(int index, const Stringclass&amp; sc);
        bool cut(int index, int length);
        void clear();                                //löscht ganzer String
        void erase(int index);                       //löscht ab index
        //Sonstige Funktionen
        int length();
        int find(const char c, int start = 0);            //suchen in einer Stringclass entweder einen
        int find(const char *c, int start = 0);           //String, eine Stringclass oder ein Zeichen
        int find(const Stringclass&amp; sc, int start = 0);   //optionaler parameter definiert den anfang zum suchen
        int compareto(const Stringclass&amp; sc);           // index der ersten verschiedenen Zeichen
        char* to_char();
};

#endif
</code></pre>
<p>So das habe ich bis jetzt.</p>
<p><strong>Ich möchte jetzt auch keinen Code von euch, sondern nur weitere Funktionen, die eventuell nützlich wären.</strong></p>
<p>Außerdem, da ich noh ziemlich neu in C++ bin, könntet ihr mir ja mal sagen wie ihr den code bis jetzt findet von der qualität her.</p>
<p>Danke schon mal im Voraus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1547396</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1547396</guid><dc:creator><![CDATA[uhsuhz]]></dc:creator><pubDate>Mon, 14 Jul 2008 21:53:40 GMT</pubDate></item><item><title><![CDATA[Reply to Tips für weitere Funktionen in eigener String-Klasse on Mon, 14 Jul 2008 22:05:35 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title="*)"
      alt="😉"
    /> protected ist wie public: nur verwenden wenn es wirklich sein muss. strings sind aber value typen. und von value typen erbt man nicht. ergo nix protected machen.</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title="*)"
      alt="😉"
    /> dir fehlt ein copyctor, beachte the law of the big three</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title="*)"
      alt="😉"
    /> deine operator+ funktionen sind falsch</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title="*)"
      alt="😉"
    /> generell sollten alle funktionen die nicht zwingend member sein muessen, ausserhalb der klasse definiert werden. darunter zB die vergleichsoperatoren, find, compareto,...</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title="*)"
      alt="😉"
    /> du solltest eine schnittstelle anbieten damit man die funktionalitaet der klasse erweitern kann: iteratoren und operator[]</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title="*)"
      alt="😉"
    /> du koenntest die performance verbessern indem du mehr speicher allokierst als du jetzt brauchst um so schneller anhaengen zu koennen. oder aber du spendierst hier eine 2. klasse, einen stringbuilder der schnelles anhaengen ermoeglicht und nachher einen string liefert (wie eben zB Java StringBuilder)</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title="*)"
      alt="😉"
    /> du solltest auf constant correctness achten</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title="*)"
      alt="😉"
    /> eine implementierung fuer swap fehlt, um 2 string objekte effizient miteinander austauschen zu koennen ohne alles kopieren zu muessen</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title="*)"
      alt="😉"
    /> index, length, etc sollten unsigned int sein, damit verhinderst du automatisch dass jemand negative werte uebergibt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1547400</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1547400</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Mon, 14 Jul 2008 22:05:35 GMT</pubDate></item><item><title><![CDATA[Reply to Tips für weitere Funktionen in eigener String-Klasse on Tue, 15 Jul 2008 17:45:31 GMT]]></title><description><![CDATA[<p>Schau doch mal, wie es dit Standardbibliothek gemacht hat. Findest bestimmt nocht interessante Sachen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1547812</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1547812</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Tue, 15 Jul 2008 17:45:31 GMT</pubDate></item><item><title><![CDATA[Reply to Tips für weitere Funktionen in eigener String-Klasse on Tue, 15 Jul 2008 18:01:15 GMT]]></title><description><![CDATA[<p>UTF-8,16 und 32 Support hätte ich gerne, ebenso latin1</p>
<p>Außerdem würde ich gerne auf einzelne Zeichen zugreifen können und mit regulären Ausdrücken suchen und ersetzen können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1547821</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1547821</guid><dc:creator><![CDATA[UTFler]]></dc:creator><pubDate>Tue, 15 Jul 2008 18:01:15 GMT</pubDate></item><item><title><![CDATA[Reply to Tips für weitere Funktionen in eigener String-Klasse on Tue, 15 Jul 2008 18:22:50 GMT]]></title><description><![CDATA[<p>- alle Zeichen umdrehen (zum rückwärts Lesen üben)<br />
- entschlüsseln mit einem weiteren Schlüsselstring<br />
- Verschlüsseln nach verschiedenen Techniken<br />
- Umwandlung in Zahlenformate<br />
- automatische Rechtschreibprüfung<br />
- Übersetzung in andere Sprachen<br />
- TxtToSpeech<br />
- usw.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1547828</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1547828</guid><dc:creator><![CDATA[Erhard Henkes]]></dc:creator><pubDate>Tue, 15 Jul 2008 18:22:50 GMT</pubDate></item><item><title><![CDATA[Reply to Tips für weitere Funktionen in eigener String-Klasse on Tue, 15 Jul 2008 18:24:05 GMT]]></title><description><![CDATA[<p>lol</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1547829</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1547829</guid><dc:creator><![CDATA[omfg]]></dc:creator><pubDate>Tue, 15 Jul 2008 18:24:05 GMT</pubDate></item><item><title><![CDATA[Reply to Tips für weitere Funktionen in eigener String-Klasse on Tue, 15 Jul 2008 18:26:52 GMT]]></title><description><![CDATA[<p>Wie wär's damit?</p>
<p>- toupper<br />
- tolower<br />
- reverse<br />
- trim<br />
- trim_front<br />
- trim_back<br />
- capitalize</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1547831</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1547831</guid><dc:creator><![CDATA[__Stefan__]]></dc:creator><pubDate>Tue, 15 Jul 2008 18:26:52 GMT</pubDate></item><item><title><![CDATA[Reply to Tips für weitere Funktionen in eigener String-Klasse on Tue, 15 Jul 2008 18:40:27 GMT]]></title><description><![CDATA[<p>omfg schrieb:</p>
<blockquote>
<p>lol</p>
</blockquote>
<p>Immer wieder der alte Käse ist doch langweilig. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1547838</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1547838</guid><dc:creator><![CDATA[Erhard Henkes]]></dc:creator><pubDate>Tue, 15 Jul 2008 18:40:27 GMT</pubDate></item><item><title><![CDATA[Reply to Tips für weitere Funktionen in eigener String-Klasse on Tue, 15 Jul 2008 18:50:03 GMT]]></title><description><![CDATA[<blockquote>
<p>automatische Rechtschreibprüfung</p>
</blockquote>
<p>Das gefällt mir persönlich am besten.. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1547843</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1547843</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Tue, 15 Jul 2008 18:50:03 GMT</pubDate></item><item><title><![CDATA[Reply to Tips für weitere Funktionen in eigener String-Klasse on Tue, 15 Jul 2008 19:29:28 GMT]]></title><description><![CDATA[<p><strong>Stefan</strong> schrieb:</p>
<blockquote>
<p>Wie wär's damit?<br />
- toupper<br />
- tolower<br />
- capitalize</p>
</blockquote>
<p>Kann schwer ins auge gehen. Das wird nicht umsonst von den streams, insbesondere den locales übernommen. Das ist keine Triviale Angelegenheit, sobald man den standardmäßig garantierten zeichensatz verlässt(der nichtmal den kompletten ASCII umfasst)</p>
<blockquote>
<p>- reverse</p>
</blockquote>
<p>Dafür gibts nen STL algorithmus.</p>
<p>Mein Vorschlag: wenn man schon nen string selbst baut, sollte man sich der Aufgabe stellen, ihn standardalgorithmus kompatibel zu machen.</p>
<p>Es fehlt also noch das komplette iterator interface der Klasse.<br />
begin/end rbegin/rend usw. Also das wär wirklich was <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> ein Interface in dem das Iterator konzept komplett durchgezogen wäre.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1547854</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1547854</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Tue, 15 Jul 2008 19:29:28 GMT</pubDate></item><item><title><![CDATA[Reply to Tips für weitere Funktionen in eigener String-Klasse on Tue, 15 Jul 2008 20:44:05 GMT]]></title><description><![CDATA[<p>oje... hätt ich doch bloß nichts gepostet^^ bin jetzt total überfordert...</p>
<p>was ist denn an den operator+ funktionen falsch?</p>
<p>außerdem ist schon ne reverse funktion drin...</p>
<p>ach ja und was ist falsch mit den const-anweisungen?</p>
<p>Danke im voraus^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1547869</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1547869</guid><dc:creator><![CDATA[uhsuhz]]></dc:creator><pubDate>Tue, 15 Jul 2008 20:44:05 GMT</pubDate></item><item><title><![CDATA[Reply to Tips für weitere Funktionen in eigener String-Klasse on Tue, 15 Jul 2008 21:01:50 GMT]]></title><description><![CDATA[<p>Ja,so eine std::string Klasse (besser) nachzubauen ist nicht so einfach,wie man sich am Anfang vielleicht denkt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1547887</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1547887</guid><dc:creator><![CDATA[Nachrichtentexter]]></dc:creator><pubDate>Tue, 15 Jul 2008 21:01:50 GMT</pubDate></item><item><title><![CDATA[Reply to Tips für weitere Funktionen in eigener String-Klasse on Tue, 15 Jul 2008 21:10:04 GMT]]></title><description><![CDATA[<p>öhm eigentlich hatte ich ja auch nicht vor sie besser zu programmieren.^^</p>
<p>1).ich versuche mal gerade ein paar tipps durchzuführen, mit dem copy-konstruktor, da kann ich ja eigentlich die operator= funktion aufrufen, oder? die soll ja auch eine neue Stringklasse machen und dann alles rüberkopieren und dann zurückgeben, oder?</p>
<p>2). was ist besser, mir wurde ja angeraten die funktionen wenn es geht außerhalb der klasse zu setzten, soll ich nun friends nehmen um direkt auf die private member zuzugreifen, oder per funktionen auf die elemente, und dann nicht per friends. Beide Wege müssten klappen, ich weiß aber nicht welcher besser ist</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1547890</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1547890</guid><dc:creator><![CDATA[uhsuhz]]></dc:creator><pubDate>Tue, 15 Jul 2008 21:10:04 GMT</pubDate></item><item><title><![CDATA[Reply to Tips für weitere Funktionen in eigener String-Klasse on Wed, 16 Jul 2008 05:02:13 GMT]]></title><description><![CDATA[<p>uhsuhz schrieb:</p>
<blockquote>
<p>2). was ist besser, mir wurde ja angeraten die funktionen wenn es geht außerhalb der klasse zu setzten, soll ich nun friends nehmen um direkt auf die private member zuzugreifen, oder per funktionen auf die elemente, und dann nicht per friends. Beide Wege müssten klappen, ich weiß aber nicht welcher besser ist</p>
</blockquote>
<p>Sofern es möglich ist, nicht als friend. Wenn es nicht geht, oder zuviel overhead bedeuted, dann natürlich friend <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1547958</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1547958</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Wed, 16 Jul 2008 05:02:13 GMT</pubDate></item><item><title><![CDATA[Reply to Tips für weitere Funktionen in eigener String-Klasse on Wed, 16 Jul 2008 06:00:31 GMT]]></title><description><![CDATA[<p>uhsuhz schrieb:</p>
<blockquote>
<p>, mit dem copy-konstruktor, da kann ich ja eigentlich die operator= funktion aufrufen, oder? die soll ja auch eine neue Stringklasse machen und dann alles rüberkopieren und dann zurückgeben, oder?</p>
</blockquote>
<p>Nein, die Aufgabe des Zuweisungsoperators ist etwas weiter gefasst. Dieser Operator ist insbesondere auch dafür zuständig, den existierenden &quot;alten&quot; Inhalt des Objekts ordentlich freizugeben. Das ist etwas, das der Copy-CTor niemals tun muss (oder darf).</p>
<p>Es gibt den den Ansatz, den Zuweisungsoperator über den Copy-CTor als &quot;Copy &amp; Swap&quot; zu implementieren, d.h. so:</p>
<pre><code class="language-cpp">Stringclass&amp; Stringclass::operator=( const Stringclass&amp; rhs )
{
    Stringclass temp( ths );
    /*this-&gt;*/Swap( temp );
    return *this;
}
</code></pre>
<p>Dazu brauchst du die bereits angesprochene effiziente Swap-Methode. Dieser Ansatz hat den Vorteil, dass du nur den Copy-CTor ausprogrammieren musst, und dass der Zuweisungsoperator dadurch auf die Prüfung auf Selbstzuweisung verzichten kann und exceptionsicher wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1547985</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1547985</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Wed, 16 Jul 2008 06:00:31 GMT</pubDate></item><item><title><![CDATA[Reply to Tips für weitere Funktionen in eigener String-Klasse on Wed, 16 Jul 2008 06:18:50 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">Stringclass&amp; Stringclass::operator=( const Stringclass&amp; rhs )
{
    Stringclass temp( ths );
    /*this-&gt;*/Swap( temp );
    return *this;
}
</code></pre>
<p>Oh, das ist clever! Wieder etwas gelernt. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1547997</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1547997</guid><dc:creator><![CDATA[__Stefan__]]></dc:creator><pubDate>Wed, 16 Jul 2008 06:18:50 GMT</pubDate></item><item><title><![CDATA[Reply to Tips für weitere Funktionen in eigener String-Klasse on Wed, 16 Jul 2008 08:17:50 GMT]]></title><description><![CDATA[<p>uhsuhz schrieb:</p>
<blockquote>
<p>oje... hätt ich doch bloß nichts gepostet^^ bin jetzt total überfordert...</p>
</blockquote>
<p>ne ne, du musst es anders sehen:<br />
viele möglichkeiten etwas zu tun, genug ideen damit du lange beschäftigt bist</p>
<blockquote>
<p>was ist denn an den operator+ funktionen falsch?</p>
</blockquote>
<p>der operator+ erstellt ein neues objekt:<br />
a+b liefert c und ändert a und b nicht.<br />
du lieferst aber nur eine referenz und kein neues objekt</p>
<blockquote>
<p>ach ja und was ist falsch mit den const-anweisungen?</p>
</blockquote>
<p>einige funktionen wie zB length() verändern das objekt nicht und sollten daher als const markiert sein.</p>
<p>damit ich</p>
<pre><code class="language-cpp">Stringclass const s(&quot;hallo&quot;);
return s.length();
</code></pre>
<p>machen kann</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1548066</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1548066</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Wed, 16 Jul 2008 08:17:50 GMT</pubDate></item><item><title><![CDATA[Reply to Tips für weitere Funktionen in eigener String-Klasse on Wed, 16 Jul 2008 20:21:10 GMT]]></title><description><![CDATA[<p>ach so^^ habs jetzt verstanden, danke für die Hilfe.</p>
<p>Das mit dem operator+ wird mir jetzt auch klar, hab da nicht nachgedacht.</p>
<pre><code>Stringclass&amp; Stringclass::operator=( const Stringclass&amp; rhs )
{
    Stringclass temp( ths ); //&lt;- müsste da nicht rhs stehen, steht jedenfalls oben in der deklaration
    /*this-&gt;*/Swap( temp );
    return *this;
}
</code></pre>
<p>Sind die anderen const anweisungen denn korrekt?</p>
<p>Danke uhsuhz</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1548504</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1548504</guid><dc:creator><![CDATA[uhsuhz]]></dc:creator><pubDate>Wed, 16 Jul 2008 20:21:10 GMT</pubDate></item><item><title><![CDATA[Reply to Tips für weitere Funktionen in eigener String-Klasse on Wed, 16 Jul 2008 20:29:59 GMT]]></title><description><![CDATA[<p>Der string sollte nicht auf ein char == ein Zeichen begrenzt sein, sondern seine Zeichengröße auf den Verwendeten Zeichensatz anpassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1548509</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1548509</guid><dc:creator><![CDATA[unicoder]]></dc:creator><pubDate>Wed, 16 Jul 2008 20:29:59 GMT</pubDate></item><item><title><![CDATA[Reply to Tips für weitere Funktionen in eigener String-Klasse on Wed, 16 Jul 2008 20:44:45 GMT]]></title><description><![CDATA[<p>unicoder schrieb:</p>
<blockquote>
<p>Der string sollte nicht auf ein char == ein Zeichen begrenzt sein, sondern seine Zeichengröße auf den Verwendeten Zeichensatz anpassen.</p>
</blockquote>
<p>hää versteh ich jetzt nicht ganz^^ vielleicht könntest du das genauer erklären</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1548519</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1548519</guid><dc:creator><![CDATA[uhsuhz]]></dc:creator><pubDate>Wed, 16 Jul 2008 20:44:45 GMT</pubDate></item><item><title><![CDATA[Reply to Tips für weitere Funktionen in eigener String-Klasse on Wed, 16 Jul 2008 20:49:07 GMT]]></title><description><![CDATA[<p>uhsuhz schrieb:</p>
<blockquote>
<p>hää versteh ich jetzt nicht ganz^^ vielleicht könntest du das genauer erklären</p>
</blockquote>
<p>char kann maximal 255 verschiedene zeichen darstellen. Der Unicodezeichensatz beispielsweise hat aber 100000 Zeichen. du verstehst das Problem? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1548522</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1548522</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Wed, 16 Jul 2008 20:49:07 GMT</pubDate></item><item><title><![CDATA[Reply to Tips für weitere Funktionen in eigener String-Klasse on Wed, 16 Jul 2008 21:34:09 GMT]]></title><description><![CDATA[<p>ach so... hmm das wird mir jetzt aber glaub ich schon ein wenig zu weit^^, ich glaube ich beschränke mich mal auf char, immerhin habe ich noch nicht so viel Erfahrung.Vielleicht kann ich später die klasse um schreiben</p>
<p>Also habe jetzt mal angefangen die klasse zu schreiben, hab jetzt mal die konstruktore und den destruktor geschrieben, würde gerne wissen ob die schon mal ok sind, also vom aufbau her:</p>
<pre><code class="language-cpp">#ifndef STRINGCLASS_H
#define STRINGCLASS_H

typedef unsigned int UINT;

class Stringclass
{
private:
    char* data;
    UINT size;
public:
    Stringclass();
    ~Stringclass();
    Stringclass(const Stringclass&amp;);

};

#endif
</code></pre>
<pre><code class="language-cpp">#include &quot;Stringclass.h&quot;

Stringclass::Stringclass()
{
    size = 0;
    data = new char[size];
}

Stringclass::~Stringclass()
{
    delete[] data;
}

Stringclass::Stringclass(const Stringclass&amp; sc)
{
    size = sc.size;
    data = new char[size];
    for(UINT i=0;i&lt;size;i++)
        data[i] = sc.data[i];
}
</code></pre>
<p>Die funktionen funktionnieren zwar alle, aber vielleicht könnte mal es ja anders schreiben oder es könnten fehler später auftreten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1548524</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1548524</guid><dc:creator><![CDATA[uhsuhz]]></dc:creator><pubDate>Wed, 16 Jul 2008 21:34:09 GMT</pubDate></item><item><title><![CDATA[Reply to Tips für weitere Funktionen in eigener String-Klasse on Wed, 16 Jul 2008 22:11:42 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title="*)"
      alt="😉"
    /> Initialisierungsliste benutzen</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title="*)"
      alt="😉"
    /></p>
<pre><code class="language-cpp">for(UINT i=0;i&lt;size;i++)
        data[i] = sc.data[i];
</code></pre>
<p>Sowas wirst du in der klasse oefters brauchen. du solltest das also in eine funktion auslagern. idealerweise gibt es dafuer zB std::memcpy oder std::copy. Du kannst es natuerlich auch selber schreiben der Uebung wegen, aber eine eigene funktion sollte es schon sein (denn doppelten code will man nie haben. immer wenn du code mehr als einmal brauchst, schreit dass nach abstraktion)</p>
<p>PS:<br />
ignoriere das Unicode Problem (also dass char nur 256 Zeichen beinhalten kann) erstmal. das thema ist zu komplex und laengt nur vom eigentlichen thema ab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1548549</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1548549</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Wed, 16 Jul 2008 22:11:42 GMT</pubDate></item><item><title><![CDATA[Reply to Tips für weitere Funktionen in eigener String-Klasse on Thu, 17 Jul 2008 05:43:52 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>PS:<br />
ignoriere das Unicode Problem (also dass char nur 256 Zeichen beinhalten kann) erstmal. das thema ist zu komplex und laengt nur vom eigentlichen thema ab.</p>
</blockquote>
<p>richtig, ich glaub allerdings auch nicht, dass unicoder den Vorschlag ernst meinte :). Andererseits ist es interessant(zumindest wars das für mich), sich mit unicode zu beschäftigen, und einen wtf moment nach dem anderen beim durchlesen der featureliste zu haben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1548586</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1548586</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Thu, 17 Jul 2008 05:43:52 GMT</pubDate></item><item><title><![CDATA[Reply to Tips für weitere Funktionen in eigener String-Klasse on Thu, 17 Jul 2008 20:50:59 GMT]]></title><description><![CDATA[<p>danke für die hilfe werde das mal einbauen^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1549013</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1549013</guid><dc:creator><![CDATA[uhsuhz]]></dc:creator><pubDate>Thu, 17 Jul 2008 20:50:59 GMT</pubDate></item><item><title><![CDATA[Reply to Tips für weitere Funktionen in eigener String-Klasse on Thu, 17 Jul 2008 21:41:02 GMT]]></title><description><![CDATA[<p>So ich habe jetzt mal bisschen weiter programmiert, und weitere fragen sind aufgetaucht. Ich dokumentiere mal den code.</p>
<pre><code class="language-cpp">void mycopy(const char* from, char* to, UINT size, UINT to_begin = 0)
{
    for(UINT i=0; i&lt;size;i++)
        to[i+to_begin] = from[i];
}

Stringclass::Stringclass()
:size(0)
{
    data = new char[size]; 
}

Stringclass::Stringclass(const Stringclass&amp; sc)
:size(sc.size)
{
    data = new char[size];
    mycopy(sc.data,data,size);
}

Stringclass::Stringclass(UINT scsize, const char* scdata)
:size(scsize)
{
    data = new char[size];
    mycopy(scdata,data,size);
}

Stringclass::~Stringclass()
{
    delete[] data;
}

Stringclass&amp; Stringclass::operator=(const Stringclass&amp; sc)
{
    Stringclass temp(sc);
    this-&gt;myswap(temp);
    return *this;
}

char&amp; Stringclass::operator[](UINT index) const
{
    return this-&gt;data[index];
}

UINT Stringclass::get_size() const
{
    cout &lt;&lt; &quot;Funktion: get_size&quot; &lt;&lt; endl;
    return size;
}
</code></pre>
<p>Also zu dem Code besteht jetzt nur eine frage, kann man &quot;data = new char[size]&quot; in die Initialisierungsliste des konstruktors packen?</p>
<p>So jetzt kommen die Fragen^^</p>
<p>Also hab mal zuerst ne swap methode geschrieben.Funktionnieren tut es, aber schön sieht das nicht aus, meiner meinung nach, da ich den standart copykonstruktor selber programmieren musste, damit temp auf sc <a href="http://verweist.So" rel="nofollow">verweist.So</a> brauche ich dann nicht den inhalt, sondern nur den zeiger auf data zu kopieren, ich muss nur den zeiger von temp auf 0 zum Schluss setzen, damit ich den speicher von this nicht lösche.Hab das mal aufgemalt:<br />
<a href="http://img179.imageshack.us/img179/9462/swapda4.jpg" rel="nofollow">http://img179.imageshack.us/img179/9462/swapda4.jpg</a></p>
<pre><code class="language-cpp">void Stringclass::myswap(Stringclass&amp; sc)
{
    Stringclass temp;
    temp.size = sc.size;
    temp.data = sc.data;
    sc.size = this-&gt;size;
    sc.data = this-&gt;data;
    this-&gt;size = temp.size;
    this-&gt;data = temp.data;
    temp.data = 0;
}
</code></pre>
<p>und dann noch den sc-realloc:</p>
<pre><code class="language-cpp">void Stringclass::sc_realloc(UINT newsize)
{
    Stringclass temp(newsize,this-&gt;data);
    myswap(temp);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1549081</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1549081</guid><dc:creator><![CDATA[uhsuhz]]></dc:creator><pubDate>Thu, 17 Jul 2008 21:41:02 GMT</pubDate></item></channel></rss>