<?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[String wiedergeben]]></title><description><![CDATA[<p>Hallo alle zusammen!</p>
<p>Ich hab hier ein Problem mit einer selbst geschriebenen String-Klasse</p>
<pre><code class="language-cpp">class String
{
private:
    const char* line;
public:
    //konstruktor
    String(const char* neuer_inhalt)
    {
        line = neuer_inhalt;
    }
    //funktionen...
};
</code></pre>
<p>Ich möchte den Inhalt (String::line) auf der Konsole ausgeben:</p>
<pre><code class="language-cpp">String str(&quot;string&quot;);
cout &lt;&lt; str &lt;&lt; &quot;\n&quot;;
</code></pre>
<p>Wie stelle ich das an?</p>
<p>MfG RusTux</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/301899/string-wiedergeben</link><generator>RSS for Node</generator><lastBuildDate>Tue, 11 Aug 2026 15:23:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/301899.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 05 Apr 2012 23:53:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to String wiedergeben on Thu, 05 Apr 2012 23:53:28 GMT]]></title><description><![CDATA[<p>Hallo alle zusammen!</p>
<p>Ich hab hier ein Problem mit einer selbst geschriebenen String-Klasse</p>
<pre><code class="language-cpp">class String
{
private:
    const char* line;
public:
    //konstruktor
    String(const char* neuer_inhalt)
    {
        line = neuer_inhalt;
    }
    //funktionen...
};
</code></pre>
<p>Ich möchte den Inhalt (String::line) auf der Konsole ausgeben:</p>
<pre><code class="language-cpp">String str(&quot;string&quot;);
cout &lt;&lt; str &lt;&lt; &quot;\n&quot;;
</code></pre>
<p>Wie stelle ich das an?</p>
<p>MfG RusTux</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199266</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199266</guid><dc:creator><![CDATA[RussianTux]]></dc:creator><pubDate>Thu, 05 Apr 2012 23:53:28 GMT</pubDate></item><item><title><![CDATA[Reply to String wiedergeben on Fri, 06 Apr 2012 00:03:19 GMT]]></title><description><![CDATA[<p>Das kannst du erreichen, indem du den &lt;&lt;-Operator ueberlaedst. Allgemein zum Operator Overloading hat pumuckl <a href="http://www.c-plusplus.net/forum/232010" rel="nofollow">hier</a> einen tollen Artikel geschrieben.</p>
<p>Ansonsten ist das Netz voll von Beispielen wie man diesen Operator ueberladen kann.</p>
<p>Zur Info, falls du das noch nicht weisst:<br />
In C++ musst du nicht deine eigene String Klasse schreiben. Es gibt bereits std::string im header &lt;string&gt;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199268</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199268</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Fri, 06 Apr 2012 00:03:19 GMT</pubDate></item><item><title><![CDATA[Reply to String wiedergeben on Fri, 06 Apr 2012 00:03:50 GMT]]></title><description><![CDATA[<p>Dir ist schon klar, dass du da im Konstruktor nur Pointer kopierst? (Und dass du versuchst std::string nachzubauen..)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199269</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Fri, 06 Apr 2012 00:03:50 GMT</pubDate></item><item><title><![CDATA[Reply to String wiedergeben on Fri, 06 Apr 2012 00:14:38 GMT]]></title><description><![CDATA[<p>icarus2 schrieb:</p>
<blockquote>
<p>Das kannst du erreichen, indem du den &lt;&lt;-Operator ueberlaedst. Allgemein zum Operator Overloading hat pumuckl <a href="http://www.c-plusplus.net/forum/232010" rel="nofollow">hier</a> einen tollen Artikel geschrieben.</p>
<p>Ansonsten ist das Netz voll von Beispielen wie man diesen Operator ueberladen kann.</p>
<p>Zur Info, falls du das noch nicht weisst:<br />
In C++ musst du nicht deine eigene String Klasse schreiben. Es gibt bereits std::string im header &lt;string&gt;.</p>
</blockquote>
<p>Danke für die schnelle Antwort!</p>
<p>Ja Ich weiß, ich bin soweit gekommen, dass ich eine eigene String-Klasse benötige, habe eigene Anforderungen weil ich zwar eine 1500 Zeilen lange eigene Stringbearbeitungsbibliothek mit 16 komplexen Algorithmen geschrieben habe, aber keine Klasse dafür hatte, nun möchte ich einen komplett eigenen Datentyp dafür entwerfen um mir Schreibarbeit zu sparen</p>
<p>cooky451 schrieb:</p>
<blockquote>
<p>Dir ist schon klar, dass du da im Konstruktor nur Pointer kopierst? (Und dass du versuchst std::string nachzubauen..)</p>
</blockquote>
<p>Ja, ist mir klar, der Konstruktor zählt rein dem Beispiel und ist nicht bzw. sollte nicht teil der fertigen Klasse sein, for more information please scroll up and read the upper messege)))</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199271</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199271</guid><dc:creator><![CDATA[RussianTux]]></dc:creator><pubDate>Fri, 06 Apr 2012 00:14:38 GMT</pubDate></item><item><title><![CDATA[Reply to String wiedergeben on Fri, 06 Apr 2012 00:14:49 GMT]]></title><description><![CDATA[<p>RussianTux schrieb:</p>
<blockquote>
<p>nun möchte ich einen komplett eigenen Datentyp dafür entwerfen um mir Schreibarbeit zu sparen</p>
</blockquote>
<p>Ja ne is klar</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199272</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199272</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Fri, 06 Apr 2012 00:14:49 GMT</pubDate></item><item><title><![CDATA[Reply to String wiedergeben on Fri, 06 Apr 2012 00:34:24 GMT]]></title><description><![CDATA[<p>RussianTux schrieb:</p>
<blockquote>
<p>Ja Ich weiß, ich bin soweit gekommen, dass ich eine eigene String-Klasse benötige, habe eigene Anforderungen</p>
</blockquote>
<p>Was sind das für Anforderungen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199273</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199273</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Fri, 06 Apr 2012 00:34:24 GMT</pubDate></item><item><title><![CDATA[Reply to String wiedergeben on Fri, 06 Apr 2012 00:36:31 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>RussianTux schrieb:</p>
<blockquote>
<p>Ja Ich weiß, ich bin soweit gekommen, dass ich eine eigene String-Klasse benötige, habe eigene Anforderungen</p>
</blockquote>
<p>Was sind das für Anforderungen?</p>
</blockquote>
<p>Der Sinn dieses Posts war es nicht euch meinen String-Typ und dessen Funktionalität vorzustellen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199275</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199275</guid><dc:creator><![CDATA[RussianTux]]></dc:creator><pubDate>Fri, 06 Apr 2012 00:36:31 GMT</pubDate></item><item><title><![CDATA[Reply to String wiedergeben on Fri, 06 Apr 2012 00:38:15 GMT]]></title><description><![CDATA[<p>Wie du Operatoren überlädst wurde doch im ersten Post geklärt. Du wirst dich daran gewöhnen müssen, dass Leute dich darauf hinweisen wenn sie denken, dass du Quatsch machst. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2199276</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199276</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Fri, 06 Apr 2012 00:38:15 GMT</pubDate></item><item><title><![CDATA[Reply to String wiedergeben on Fri, 06 Apr 2012 07:50:16 GMT]]></title><description><![CDATA[<p>RussianTux schrieb:</p>
<blockquote>
<p>cooky451 schrieb:</p>
<blockquote>
<p>RussianTux schrieb:</p>
<blockquote>
<p>Ja Ich weiß, ich bin soweit gekommen, dass ich eine eigene String-Klasse benötige, habe eigene Anforderungen</p>
</blockquote>
<p>Was sind das für Anforderungen?</p>
</blockquote>
<p>Der Sinn dieses Posts war es nicht euch meinen String-Typ und dessen Funktionalität vorzustellen...</p>
</blockquote>
<p>Ne, denke ich auch, dass das nicht Deine Absicht war. Nichtsdestotrotz bietet sich hier die Gelegenheit über Deine Vorurteile gegenüber std::string zu sprechen. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2199294</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199294</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 06 Apr 2012 07:50:16 GMT</pubDate></item><item><title><![CDATA[Reply to String wiedergeben on Fri, 06 Apr 2012 10:14:21 GMT]]></title><description><![CDATA[<p>RussianTux schrieb:</p>
<blockquote>
<p>Der Sinn dieses Posts war es nicht euch meinen String-Typ und dessen Funktionalität vorzustellen...</p>
</blockquote>
<p>Lass es mich mal so ausdrücken: die wahrscheinlichkeit, dass es schlechter als std::string wird geht gegen 1, wenn du nicht einmal Operatorüberladung kennst :). Es gibt Fälle bei denen std::string nicht gut ist. Aber die sind recht speziell.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199319</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199319</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Fri, 06 Apr 2012 10:14:21 GMT</pubDate></item><item><title><![CDATA[Reply to String wiedergeben on Fri, 06 Apr 2012 10:49:26 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>Es gibt Fälle bei denen std::string nicht gut ist. Aber die sind recht speziell.</p>
</blockquote>
<p>Ich dachte <code>std::string</code> wäre <a href="http://www.gotw.ca/gotw/084.htm" rel="nofollow">allgemein schlecht designt</a>.</p>
<p>Bei einer &quot;1500 Zeilen lange[n] eigene[n] Stringbearbeitungsbibliothek&quot; gilt das aber wohl genauso.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199324</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199324</guid><dc:creator><![CDATA[unstrung]]></dc:creator><pubDate>Fri, 06 Apr 2012 10:49:26 GMT</pubDate></item><item><title><![CDATA[Reply to String wiedergeben on Fri, 06 Apr 2012 11:02:30 GMT]]></title><description><![CDATA[<p>Das Design ist bloß doof, da man die ganzen schönen Zeichenkettenalgorithmen an std::string gebunden hat, anstatt freie Funktionen zu machen, die man dann auch mit den Iteratoren anderer Datentypen hätte benutzen können. Das ändert aber nichts da dran, dass der std::string selbst seine Aufgaben ziemlich gut macht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199325</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199325</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 06 Apr 2012 11:02:30 GMT</pubDate></item><item><title><![CDATA[Reply to String wiedergeben on Fri, 06 Apr 2012 13:58:17 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>RussianTux schrieb:</p>
<blockquote>
<p>Der Sinn dieses Posts war es nicht euch meinen String-Typ und dessen Funktionalität vorzustellen...</p>
</blockquote>
<p>Lass es mich mal so ausdrücken: die wahrscheinlichkeit, dass es schlechter als std::string wird geht gegen 1, wenn du nicht einmal Operatorüberladung kennst :). Es gibt Fälle bei denen std::string nicht gut ist. Aber die sind recht speziell.</p>
</blockquote>
<p>Um das Zuschalten von noch mehr Bibliotheken zu vermeiden, habe ich mir in meinem eigenem Projekt eine eigene String-Bibliothek mit all den nötigen Funktionen geschrieben, die ich gebraucht habe, außerdem habe ich versucht so viel Speicher wie möglich zu sparen und alle Funktionen und Typen komplett dynamisch geschrieben, natürlich hätte ich auch std::string nehmen können, aber um diese strings so zu bearbeiten wie ich es gebraucht hätte, hätte ich noch andere Bibliotheken dazu schalten müssen, &quot;boost&quot; ist einer der Beispiele, das habe ich vermieden weil meine Philosophie auf kompletter Unabhängigkeit beruht.</p>
<p>Die Operatoren sind kein wirklich großes Problem gewesen, habe ich jetzt mit eurer Hilfe eingebaut, dafür danke ich euch natürlich, immer mal wieder was neues dazuzulernen ist immer gut, das größte Problem an der ganzen Bibliothek waren wohl die 16 komplexen Bearbeitungsalgorithmen welche genau das erfüllen, was ich brauche.</p>
<p>Die Klasse habe ich gebraucht um die rohe Arbeit mit &quot;const char&quot; Pointern zu vermeiden, es sollte also so einfach wie std::string zu nutzen sein, dennoch die volle Funktionalität meiner String-lib besitzen.</p>
<p>Die Funktionen der Klasse bei der Erstellung eines neuen Objektes auf Basis dieser Klasse, werden nicht in den Speicher geladen, was dessen Speicherverbrauch erheblich reduziert. Sobald eine Funktion gebraucht wird, wird diese in den Speicher geladen, ausgeführt und anschließend wieder terminiert.</p>
<p>Ich kann nicht behaupten, dass diese - wie ihr sagen würdet &quot;nachgebaute&quot; lib - in irgendwelcher hinsicht besser ist als std::string, ich weiß nur, dass die Funktionalität dieses Typs deutlich höher als die des std::strings ist und genau für mein Projekt und Vorhaben zugeschnitten ist.</p>
<p>Edit:</p>
<p>SeppJ schrieb:</p>
<blockquote>
<p>Das Design ist bloß doof, da man die ganzen schönen Zeichenkettenalgorithmen an std::string gebunden hat, anstatt freie Funktionen zu machen, die man dann auch mit den Iteratoren anderer Datentypen hätte benutzen können. Das ändert aber nichts da dran, dass der std::string selbst seine Aufgaben ziemlich gut macht.</p>
</blockquote>
<p>Alle 16 Algorithmen sind in meiner Bibliothek komplett unabhängig von der Klasse selbst, die Klasse ist wie oben bereits beschrieben nur zur Arbeitserleichterung gedacht.</p>
<p>unstrung schrieb:</p>
<blockquote>
<p>otze schrieb:</p>
<blockquote>
<p>Es gibt Fälle bei denen std::string nicht gut ist. Aber die sind recht speziell.</p>
</blockquote>
<p>Ich dachte <code>std::string</code> wäre <a href="http://www.gotw.ca/gotw/084.htm" rel="nofollow">allgemein schlecht designt</a>.</p>
<p>Bei einer &quot;1500 Zeilen lange[n] eigene[n] Stringbearbeitungsbibliothek&quot; gilt das aber wohl genauso.</p>
</blockquote>
<p>1500 Zeilen Funktionalität, wie ich oben bereits geschrieben habe, werden keine von diesen Funktionen anfangs in den Speicher geladen, sie können bei bedarf dazu geladen, ausgeführt und wieder terminiert werden, somit spielt es überhaupt keine Rolle wie viele Funktionen die Klasse beinhaltet und wie groß diese Funktionen sind, da immer nur das zur Verfügung gestellt wird, was gerade gebraucht wird, theoretisch hätten selbst 100500 Zeilen mit 100500 Funktionen keinen Einfluss auf den Speicherverbrauch und Ausführungsgeschwindigkeit der lib</p>
<p>Ich hoffe, ich konnte euch hiermit alle Fragen beantworten, wenn nicht stehe ich natürlich weiterhin offen für weitere Diskussionen <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>
<p>MfG RusTux</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199354</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199354</guid><dc:creator><![CDATA[RussianTux]]></dc:creator><pubDate>Fri, 06 Apr 2012 13:58:17 GMT</pubDate></item><item><title><![CDATA[Reply to String wiedergeben on Fri, 06 Apr 2012 14:06:34 GMT]]></title><description><![CDATA[<p>Irgendwie.. widersprichst du dir dauernd selber..</p>
<p>RussianTux schrieb:</p>
<blockquote>
<p>Ich kann nicht behaupten, dass diese - wie ihr sagen würdet &quot;nachgebaute&quot; lib - in irgendwelcher hinsicht besser ist als std::string, ich weiß nur, dass die Funktionalität dieses Typs deutlich höher als die des std::strings ist und genau für mein Projekt und Vorhaben zugeschnitten ist.</p>
</blockquote>
<p>Was denn jetzt? Was genau kann deine Klasse was std::string nicht kann? (Die Frage habe ich schon am Anfang gestellt und du hast sie immer noch nicht beantwortet.)</p>
<p>RussianTux schrieb:</p>
<blockquote>
<p>Die Funktionen der Klasse bei der Erstellung eines neuen Objektes auf Basis dieser Klasse, werden nicht in den Speicher geladen, was dessen Speicherverbrauch erheblich reduziert. Sobald eine Funktion gebraucht wird, wird diese in den Speicher geladen, ausgeführt und anschließend wieder terminiert.</p>
</blockquote>
<p><strong>W T F</strong> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> Erklär mal was genau du da gemacht hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199357</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199357</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Fri, 06 Apr 2012 14:06:34 GMT</pubDate></item><item><title><![CDATA[Reply to String wiedergeben on Fri, 06 Apr 2012 14:13:17 GMT]]></title><description><![CDATA[<p>RussianTux schrieb:</p>
<blockquote>
<p>Die Funktionen der Klasse bei der Erstellung eines neuen Objektes auf Basis dieser Klasse, werden nicht in den Speicher geladen, was dessen Speicherverbrauch erheblich reduziert. Sobald eine Funktion gebraucht wird, wird diese in den Speicher geladen, ausgeführt und anschließend wieder terminiert.</p>
</blockquote>
<p>Alle Funktionen einer Klasse sind völlig unabhängig davon, wie viele Objekte der Klasse du erstellt hast, genau einmal im Speicher. Daher ergibt diese Aussage keinen Sinn.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199359</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199359</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Fri, 06 Apr 2012 14:13:17 GMT</pubDate></item><item><title><![CDATA[Reply to String wiedergeben on Fri, 06 Apr 2012 14:18:11 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>Irgendwie.. widersprichst du dir dauernd selber..</p>
<p>RussianTux schrieb:</p>
<blockquote>
<p>Ich kann nicht behaupten, dass diese - wie ihr sagen würdet &quot;nachgebaute&quot; lib - in irgendwelcher hinsicht besser ist als std::string, ich weiß nur, dass die Funktionalität dieses Typs deutlich höher als die des std::strings ist und genau für mein Projekt und Vorhaben zugeschnitten ist.</p>
</blockquote>
<p>Was denn jetzt? Was genau kann deine Klasse was std::string nicht kann? (Die Frage habe ich schon am Anfang gestellt und du hast sie immer noch nicht beantwortet.)</p>
<p>RussianTux schrieb:</p>
<blockquote>
<p>Die Funktionen der Klasse bei der Erstellung eines neuen Objektes auf Basis dieser Klasse, werden nicht in den Speicher geladen, was dessen Speicherverbrauch erheblich reduziert. Sobald eine Funktion gebraucht wird, wird diese in den Speicher geladen, ausgeführt und anschließend wieder terminiert.</p>
</blockquote>
<p><strong>W T F</strong> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> Erklär mal was genau du da gemacht hast.</p>
</blockquote>
<p>1. Ein Beispiel wäre das Splitten eines Strings mithilfe eines Delimiter-Strings, das kann std::string von Grund auf nicht, dafür braucht man widerrum andere Bibliotheken, was für mich nicht infrage kommt, auch bedeutet es viel Schreibarbeit und unübersichtlichen Code.<br />
Dazu kommen noch diverse Konvertoren und Formatierungswerkzeuge die wichtig für mein Projekt sind...</p>
<p>2. Assembler, nein Spaß beiseite, dynamische Speicherverwaltung in C++ und Methoden, weiteres kannst du dir selber denken...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199361</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199361</guid><dc:creator><![CDATA[RussianTux]]></dc:creator><pubDate>Fri, 06 Apr 2012 14:18:11 GMT</pubDate></item><item><title><![CDATA[Reply to String wiedergeben on Fri, 06 Apr 2012 14:22:35 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>Irgendwie.. widersprichst du dir dauernd selber..</p>
</blockquote>
<p>Ich widerspreche mir nicht, viel Funktionalität heißt nicht sofort &quot;besser&quot;, es kommt natürlich drauf an wie du &quot;besser&quot; in diesem Fall definierst...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199362</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199362</guid><dc:creator><![CDATA[RussianTux]]></dc:creator><pubDate>Fri, 06 Apr 2012 14:22:35 GMT</pubDate></item><item><title><![CDATA[Reply to String wiedergeben on Fri, 06 Apr 2012 14:22:26 GMT]]></title><description><![CDATA[<p>RussianTux schrieb:</p>
<blockquote>
<p>1. Ein Beispiel wäre das Splitten eines Strings mithilfe eines Delimiter-Strings, das kann std::string von Grund auf nicht, dafür braucht man widerrum andere Bibliotheken, was für mich nicht infrage kommt, auch bedeutet es viel Schreibarbeit und unübersichtlichen Code.<br />
Dazu kommen noch diverse Konvertoren und Formatierungswerkzeuge die wichtig für mein Projekt sind...</p>
</blockquote>
<p>Ich weiß zwar nicht was du mit &quot;splitten mit einem Delimiter-String&quot; genau meinst, aber das hört sich <strong>ganz stark</strong> nach Kandidaten für freie Methoden an.</p>
<p>RussianTux schrieb:</p>
<blockquote>
<p>2. Assembler, nein Spaß beiseite, dynamische Speicherverwaltung in C++ und Methoden, weiteres kannst du dir selber denken...</p>
</blockquote>
<p>Nein, überhaupt nicht. Das macht keinen Sinn. Gar nicht. Poste mal Beispielcode.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199363</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199363</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Fri, 06 Apr 2012 14:22:26 GMT</pubDate></item><item><title><![CDATA[Reply to String wiedergeben on Fri, 06 Apr 2012 14:34:36 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>RussianTux schrieb:</p>
<blockquote>
<p>2. Assembler, nein Spaß beiseite, dynamische Speicherverwaltung in C++ und Methoden, weiteres kannst du dir selber denken...</p>
</blockquote>
<p>Nein, überhaupt nicht. Das macht keinen Sinn. Gar nicht. Poste mal Beispielcode.</p>
</blockquote>
<p>In den Methoden der Klasse String werden dynamische Klassen (1 Klasse mit je 1 Methode welche den Algorithmus beinhaltet) gebildet</p>
<pre><code class="language-cpp">class Funktion
{
public:
    static &lt;return_value&gt; Algorithmus(parameter)
    {
        //funktionalität
        return &lt;return_value&gt;;
    }
};

class String
{
public:

    Methode(&lt;parameter&gt;)
    {
        Funktion* func = new Funktion;
        &lt;return_value&gt; =  func-&gt;Algorithmus(&lt;parameter&gt;);
        delete func;
        return &lt;return_value&gt;;
    }
};
</code></pre>
<p>Sobald eine Methode des Strings aufgerufen wird, wird ein Abbild der Funktion in den Speicher geladen, ausgeführt und anschließend aus dem Speicher gelöscht.<br />
Eigentlich ganz einfach, kann man aber natürlich auch an etwas nicht gedacht haben, aber eigentlich sollte es so einwandfrei funktionieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199364</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199364</guid><dc:creator><![CDATA[RussianTux]]></dc:creator><pubDate>Fri, 06 Apr 2012 14:34:36 GMT</pubDate></item><item><title><![CDATA[Reply to String wiedergeben on Fri, 06 Apr 2012 14:48:27 GMT]]></title><description><![CDATA[<p>RussianTux schrieb:</p>
<blockquote>
<p>1. Ein Beispiel wäre das Splitten eines Strings mithilfe eines Delimiter-Strings, das kann std::string von Grund auf nicht</p>
</blockquote>
<p>Du hast erst mal recht, dass es so etwas wie pythons split() nicht direkt gibt. Aber in 99% der Fälle braucht man auch keinen physischen Schritt, sondern nur wissen, von wo bis wo der nächste Abschnitt geht, damit man darauf arbeiten kann. Und wenn man ihn braucht, dann ist das noch lange kein Argument gegen std::string, weil er alle Funktionalität zusammen mit der STL bietet, um sich so etwas zu bauen. Dafür war er gedacht.</p>
<p>quick&amp; dirty:</p>
<pre><code class="language-cpp">std::vector&lt;std::string&gt; split(std::string const&amp; str, std::string const&amp; delimiter){
    std::vector&lt;std::string&gt; tokens;
    std::string::const_iterator pos = str.begin();
    while(pos &lt; str.end()){
        std::string::const_iterator tokenend = std::search( pos,str.end(), delimiter.begin(),delimiter.end());
        tokens.push_back(std::string(pos,tokenend);
        pos = tokenend+delimiter.size();
    }
    return tokens;
}
</code></pre>
<blockquote>
<p>Dazu kommen noch diverse Konvertoren und Formatierungswerkzeuge die wichtig für mein Projekt sind...</p>
</blockquote>
<p>sicher kann man das alles auch trivial mit der Standardbibliothek in einen 5-Zeiler verwandeln.</p>
<p>//edit formatierung...</p>
<p>//edit2</p>
<blockquote>
<p>Sobald eine Methode des Strings aufgerufen wird, wird ein Abbild der Funktion in den Speicher geladen, ausgeführt und anschließend aus dem Speicher gelöscht.<br />
Eigentlich ganz einfach, kann man aber natürlich auch an etwas nicht gedacht haben, aber eigentlich sollte es so einwandfrei funktionieren.</p>
</blockquote>
<p>Nein, so funktioniert C++ nicht. Der Code ist immer im Speicher. Und zwar exakt 1x. Das einladen passiert zum Programmstart und endet beim Ende des Programmes (außer du machst gruseliges explizites dll handling und selbst da wäre ich mir nicht sicher.).</p>
<p>//edit3 Schleifenbedingung umgewandelt. manchmal sollte man länger als 1 Minute nachdenken <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/2199365</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199365</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Fri, 06 Apr 2012 14:48:27 GMT</pubDate></item><item><title><![CDATA[Reply to String wiedergeben on Fri, 06 Apr 2012 14:44:19 GMT]]></title><description><![CDATA[<p>Funktionscode liegt im statischen Speicher. Ist ja auch ganz logisch. Wo soll denn der Algorithmus herkommen, nachdem du den Speicher reserviert hast? Ja, das funktioniert, aber es hat nicht den Effekt den du dir vorstellst. Zumal du auch einfach ein Objekt der Klasse erstellst, das dann dann schon über zwei Ebenen nichts mehr miteinander zu tun. Das Einzige was du hier erreichst, ist ein unglaublich großer Overhead durch new und delete, der das Ganze wahrscheinlich 100-1000 mal langsamer macht als vorher.</p>
<p>Gut, dass wir da noch mal drüber schreiben konnten. <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>
<p>Und warum deine Stringmethoden keine freien Funktionen sein können, hast du auch noch nicht beantwortet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199366</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199366</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Fri, 06 Apr 2012 14:44:19 GMT</pubDate></item><item><title><![CDATA[Reply to String wiedergeben on Fri, 06 Apr 2012 15:04:06 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>Funktionscode liegt im statischen Speicher. Ist ja auch ganz logisch. Wo soll denn der Algorithmus herkommen, nachdem du den Speicher reserviert hast? Ja, das funktioniert, aber es hat nicht den Effekt den du dir vorstellst. Zumal du auch einfach ein Objekt der Klasse erstellst, das dann dann schon über zwei Ebenen nichts mehr miteinander zu tun. Das Einzige was du hier erreichst, ist ein unglaublich großer Overhead durch new und delete, der das Ganze wahrscheinlich 100-1000 mal langsamer macht als vorher.</p>
<p>Gut, dass wir da noch mal drüber schreiben konnten. <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>
<p>Und warum deine Stringmethoden keine freien Funktionen sein können, hast du auch noch nicht beantwortet.</p>
</blockquote>
<p>Doch habe ich,</p>
<p>RussianTux schrieb:</p>
<blockquote>
<p>Alle 16 Algorithmen sind in meiner Bibliothek komplett unabhängig von der Klasse selbst, die Klasse ist wie oben bereits beschrieben nur zur Arbeitserleichterung gedacht.</p>
</blockquote>
<p>Nur das Problem, welches ich befürchtet habe, war, dass wenn ich die Funktion einfach in der String-Klasse als Methode deklarieren würde:</p>
<pre><code class="language-cpp">&lt;Typ&gt; Algorithmus1(&lt;parameter&gt;)
{
    //funktionalität...
    return &lt;Typ&gt;;
}

&lt;Typ&gt; Algorithmus2(&lt;parameter&gt;)
{
    //funktionalität...
    return &lt;Typ&gt;;
}
//und noch viele weitere Algorithmen...

class String
{
private:
    const char* Zeile;
public:
    //methoden
    &lt;Typ&gt; Methode1(&lt;parameter&gt;)
    {
        return Algorithmus1(Zeile, &lt;parameter&gt;);
    }
    &lt;Typ&gt; Methode2(&lt;parameter&gt;)
    {
        return Algorithmus2(Zeile, &lt;parameter&gt;);
    }
    //und noch viele weitere Methoden...
};
</code></pre>
<p>und später viele Objekte, also Strings, auf Basis dieser Klasse erstellen würde, die Funktionalität eines jeden Objektes jeweils 1 mal in den Speicher geladen werden würde, bei 5 kleinen Strings wären es also 16*5 große Algorithmen und das ist ineffizient, oder hab ich beim Lernen mal wieder nicht aufgepasst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199371</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199371</guid><dc:creator><![CDATA[RussianTux]]></dc:creator><pubDate>Fri, 06 Apr 2012 15:04:06 GMT</pubDate></item><item><title><![CDATA[Reply to String wiedergeben on Fri, 06 Apr 2012 15:08:15 GMT]]></title><description><![CDATA[<p>RussianTux schrieb:</p>
<blockquote>
<p>Sobald eine Methode des Strings aufgerufen wird, wird ein Abbild der Funktion in den Speicher geladen, ausgeführt und anschließend aus dem Speicher gelöscht.<br />
Eigentlich ganz einfach, kann man aber natürlich auch an etwas nicht gedacht haben, aber eigentlich sollte es so einwandfrei funktionieren.</p>
</blockquote>
<p>Ich frage mich immer wieder, wie manche Leute auf manche Ideen kommen. Und sich dann auch noch so sicher sind, dass sie versuchen andere zu belehren.</p>
<p>Wie cooky451 schon geschrieben hat: das funktioniert sich nicht so wie du denkst.</p>
<p>Die Funktion wird in deinem Beispiel nicht dynamisch geladen und dann wieder entladen.</p>
<p>Verschiedene Betriebssysteme handhaben das z.T. etwas unterschiedlich, d.h. es kann sein dass manche Code-Teile wirklich erst später geladen werden. Wie das im Detail abläuft und was es für Auswirkungen hat ist etwas zu komplex um es hier zu erklären.</p>
<p>Aber lass dir gesagt sein: mit dem &quot;new + delete&quot; in beinem Beispiel kannst du diesen Prozess nicht beeinflussen. Es würde mit einer freien Funktion genau so passieren oder genau so nicht passieren. Das einzige was das &quot;new + delete&quot; macht, ist CPU-Zeit zu verschwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199373</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199373</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 06 Apr 2012 15:08:15 GMT</pubDate></item><item><title><![CDATA[Reply to String wiedergeben on Fri, 06 Apr 2012 15:19:57 GMT]]></title><description><![CDATA[<p>RussianTux schrieb:</p>
<blockquote>
<p>Alle 16 Algorithmen sind in meiner Bibliothek komplett unabhängig von der Klasse selbst, die Klasse ist wie oben bereits beschrieben nur zur Arbeitserleichterung gedacht.</p>
</blockquote>
<p>Und <strong>was</strong> macht sie leichter und <strong>was</strong> hindert dich daran freie Funktionen mit der gleichen Aufgabe für std::string zu schreiben?</p>
<p>RussianTux schrieb:</p>
<blockquote>
<p>und später viele Objekte, also Strings, auf Basis dieser Klasse erstellen würde, die Funktionalität eines jeden Objektes jeweils 1 mal in den Speicher geladen werden würde, bei 5 kleinen Strings wären es also 16*5 große Algorithmen und das ist ineffizient, oder hab ich beim Lernen mal wieder nicht aufgepasst?</p>
</blockquote>
<p>Lies doch die Beiträge hier. Funktionen liegen im statischen Speicher undzwar <strong>genau einmal</strong>, und da kannst du noch so viel mit new zaubern, daran wirst du nichts ändern. dlls können das vielleicht, aber das liegt völlig außerhalb der Sprache.</p>
<p>Hättest du meinen Beitrag oben ordentlich gelesen, hättest du das auch gemerkt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199376</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199376</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Fri, 06 Apr 2012 15:19:57 GMT</pubDate></item><item><title><![CDATA[Reply to String wiedergeben on Fri, 06 Apr 2012 15:24:58 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>RussianTux schrieb:</p>
<blockquote>
<p>Alle 16 Algorithmen sind in meiner Bibliothek komplett unabhängig von der Klasse selbst, die Klasse ist wie oben bereits beschrieben nur zur Arbeitserleichterung gedacht.</p>
</blockquote>
<p>Und <strong>was</strong> machen sie leichter und <strong>was</strong> hindert dich daran freie Funktionen mit der gleichen Aufgabe für std::string zu schreiben?</p>
<p>RussianTux schrieb:</p>
<blockquote>
<p>und später viele Objekte, also Strings, auf Basis dieser Klasse erstellen würde, die Funktionalität eines jeden Objektes jeweils 1 mal in den Speicher geladen werden würde, bei 5 kleinen Strings wären es also 16*5 große Algorithmen und das ist ineffizient, oder hab ich beim Lernen mal wieder nicht aufgepasst?</p>
</blockquote>
<p>Lies doch die Beiträge hier. Funktionen liegen im statischen Speicher undzwar <strong>genau einmal</strong>, und da kannst du noch so viel mit new zaubern, daran wirst du nichts ändern. dlls können das vielleicht, aber das liegt völlig außerhalb der Sprache.</p>
<p>Hättest du meinen Beitrag oben ordentlich gelesen, hättest du das auch gemerkt.</p>
</blockquote>
<p>Ok ich verstehe, pro Klasse werden also genau 1 mal alle Funktionen in den statischen Speicher geschrieben und <strong>jedes</strong> darauf basierende Objekt, wendet sich dann an diesen statischen Speicher um eine Methode aufzurufen, richtig?</p>
<p>wenn das so ist, ist dieser Aufwand also gar nicht erst nötig und die Klasse kann ganz einfach geschrieben werden:</p>
<pre><code class="language-cpp">&lt;Typ&gt; Algorithmus1(const char* string, &lt;Parameter&gt;)
{
    //Funktionalität...
    return &lt;Typ&gt;;
}

&lt;Typ&gt; Algorithmus2(const char* string, &lt;Parameter&gt;)
{
    //Funktionalität...
    return &lt;Typ&gt;;
}

// alle weiteren 14 Algorithmen...

class String
{
private:
    const char* Zeile;
public:
    &lt;Typ&gt; Methode1(&lt;Parameter&gt;)
    {
        return Algorithmus2(Ziele, &lt;Parameter&gt;);
    }

    &lt;Typ&gt; Methode2(&lt;parameter&gt;)
    {
        return Algorithmus2(Zeile, &lt;Parameter&gt;);
    }
    //alle restlichen 14 Methoden...
};
</code></pre>
<p>Und selbst gleichzeitiges Existieren von mehreren Dutzend Objekten nach der Klassenvorlage würde die Anzahl der Funktionen im Speicher nicht erhöhen, korrekt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199379</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199379</guid><dc:creator><![CDATA[RussianTux]]></dc:creator><pubDate>Fri, 06 Apr 2012 15:24:58 GMT</pubDate></item><item><title><![CDATA[Reply to String wiedergeben on Fri, 06 Apr 2012 15:25:29 GMT]]></title><description><![CDATA[<p>[quote=&quot;RussianTux&quot;]</p>
<p>otze schrieb:</p>
<blockquote>
<p>Um das Zuschalten von noch mehr Bibliotheken zu vermeiden, habe ich mir in meinem eigenem Projekt eine eigene String-Bibliothek mit all den nötigen Funktionen geschrieben, die ich gebraucht habe ... das habe ich vermieden weil meine Philosophie auf kompletter Unabhängigkeit beruht.</p>
</blockquote>
<p>Ich möchte hier nicht auf den sonstigen Unsinn eingehen, den du von dir gegeben hast, das haben schon andere getan. Aber allein diese Aussagen finde ich nochmal erwähnenswert. Das ist das Not invented here Syndrom. Ganz übel, ich hoffe du kommst irgendwann davon weg. Das führt mit der Zeit zu unglaublichen Problemen. Wenn du sagst, du willst eine eigene String Klasse schreiben, um C++ zu lernen, ok, ist vielleicht nicht das beste Übungsprojekt, aber meinetwegen. Aber alles andere sollte man sich ganz schnell abgewöhnen. Es gibt in der Tat manchmal Fälle, wo es besser ist, von Fremdbibliotheken unabhängig zu sein, oder eigene zu schreiben, aber die Fälle sind extrem selten und dann muss man schon ganz genau wissen, warum man das tut.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199380</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199380</guid><dc:creator><![CDATA[Mechanics]]></dc:creator><pubDate>Fri, 06 Apr 2012 15:25:29 GMT</pubDate></item></channel></rss>