<?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[Ctor bei basic_string&amp;lt;char&amp;gt; und operator+]]></title><description><![CDATA[<p>Eeeeeeeinen guten Abend wünsche ich erstmal ^^</p>
<p>Ich hatte gerade ein Problem bei einer Implementierung einer eigenen String-Klasse, dass ich nicht ganz verstehe, und vielleicht kann mir hier der ein oder andere einen Hinweis geben, warum ich dieses Problem hatte. Prinzipiell ist meine Klasse ein simpler <strong>std::string</strong> den ich um einpaar Funktionen erweitern will. Die Definition sieht wie folgt aus:</p>
<pre><code class="language-cpp">typedef C_STRING_T : public std::string
{
// [...]
}String_t;
</code></pre>
<p>Was ich normalerweise bei einem <strong>std::string</strong> immer gern verwendet habe, war die Möglichkeit diverse <strong>const char</strong>* und andere <strong>std::string</strong> mit dem passenden Ctor zu verknüpfen um daraus einen neuen String zu schaffen, wie folgt:</p>
<pre><code class="language-cpp">std::string strWelt = &quot;Welt&quot;;
std::string strNeu = std::string(&quot;Hallo &quot; + strWelt);
</code></pre>
<p>Versuche ich dieses Stück Code mit einem String vom Typ meiner Klasse zu verwenden,</p>
<pre><code class="language-cpp">String_t strWelt = &quot;Welt&quot;;
String_t strNeu = String_t(&quot;Hallo &quot; + strWelt);
</code></pre>
<p>meckert der Compiler das Fehlen eines passenden Ctor an. Das liegt einzig und allein an dem <strong>const char</strong>*, denn wenn ich LHS und RHS bei der &quot;+&quot;-Operation vertausche, geht's (die jeweiligen Operatoren sind implementiert).</p>
<p>Folgende Ctor's habe ich definiert:</p>
<pre><code class="language-cpp">explicit C_STRING_T(void);
C_STRING_T(const C_STRING_T&amp; str);
C_STRING_T(const C_STRING_T&amp; str, size_t pos, size_t n = npos);
C_STRING_T(const char* s, size_t n);
C_STRING_T(const char* s);
C_STRING_T(size_t n, char c);
</code></pre>
<p>Der Ctor der mir fehlt, und nach dessen Implementierung der Code compiled wird, ist</p>
<pre><code class="language-cpp">C_STRING_T(const std::string&amp; str);
</code></pre>
<p>So.... jetzt versteh' ich leider nicht ganz, warum der Compiler genau diesen braucht. Wieso wird in beiden Fällen der <strong>const char[6] = &quot;Hallo &quot;</strong> als <strong>std::string</strong> interpretiert, und bei Verwendung meiner Klasse nicht als <strong>String_t</strong> (denn hier hätte ich ja den passenden Ctor)? Müsste da nicht ein globaler &quot;+&quot;-Operator für <strong>const char</strong>* existieren?</p>
<p>Gruß<br />
PuerNoctis</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/248889/ctor-bei-basic_string-lt-char-gt-und-operator</link><generator>RSS for Node</generator><lastBuildDate>Wed, 16 Sep 2026 18:16:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/248889.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 30 Aug 2009 18:23:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Ctor bei basic_string&amp;lt;char&amp;gt; und operator+ on Sun, 30 Aug 2009 18:23:35 GMT]]></title><description><![CDATA[<p>Eeeeeeeinen guten Abend wünsche ich erstmal ^^</p>
<p>Ich hatte gerade ein Problem bei einer Implementierung einer eigenen String-Klasse, dass ich nicht ganz verstehe, und vielleicht kann mir hier der ein oder andere einen Hinweis geben, warum ich dieses Problem hatte. Prinzipiell ist meine Klasse ein simpler <strong>std::string</strong> den ich um einpaar Funktionen erweitern will. Die Definition sieht wie folgt aus:</p>
<pre><code class="language-cpp">typedef C_STRING_T : public std::string
{
// [...]
}String_t;
</code></pre>
<p>Was ich normalerweise bei einem <strong>std::string</strong> immer gern verwendet habe, war die Möglichkeit diverse <strong>const char</strong>* und andere <strong>std::string</strong> mit dem passenden Ctor zu verknüpfen um daraus einen neuen String zu schaffen, wie folgt:</p>
<pre><code class="language-cpp">std::string strWelt = &quot;Welt&quot;;
std::string strNeu = std::string(&quot;Hallo &quot; + strWelt);
</code></pre>
<p>Versuche ich dieses Stück Code mit einem String vom Typ meiner Klasse zu verwenden,</p>
<pre><code class="language-cpp">String_t strWelt = &quot;Welt&quot;;
String_t strNeu = String_t(&quot;Hallo &quot; + strWelt);
</code></pre>
<p>meckert der Compiler das Fehlen eines passenden Ctor an. Das liegt einzig und allein an dem <strong>const char</strong>*, denn wenn ich LHS und RHS bei der &quot;+&quot;-Operation vertausche, geht's (die jeweiligen Operatoren sind implementiert).</p>
<p>Folgende Ctor's habe ich definiert:</p>
<pre><code class="language-cpp">explicit C_STRING_T(void);
C_STRING_T(const C_STRING_T&amp; str);
C_STRING_T(const C_STRING_T&amp; str, size_t pos, size_t n = npos);
C_STRING_T(const char* s, size_t n);
C_STRING_T(const char* s);
C_STRING_T(size_t n, char c);
</code></pre>
<p>Der Ctor der mir fehlt, und nach dessen Implementierung der Code compiled wird, ist</p>
<pre><code class="language-cpp">C_STRING_T(const std::string&amp; str);
</code></pre>
<p>So.... jetzt versteh' ich leider nicht ganz, warum der Compiler genau diesen braucht. Wieso wird in beiden Fällen der <strong>const char[6] = &quot;Hallo &quot;</strong> als <strong>std::string</strong> interpretiert, und bei Verwendung meiner Klasse nicht als <strong>String_t</strong> (denn hier hätte ich ja den passenden Ctor)? Müsste da nicht ein globaler &quot;+&quot;-Operator für <strong>const char</strong>* existieren?</p>
<p>Gruß<br />
PuerNoctis</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1769439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769439</guid><dc:creator><![CDATA[PuerNoctis]]></dc:creator><pubDate>Sun, 30 Aug 2009 18:23:35 GMT</pubDate></item><item><title><![CDATA[Reply to Ctor bei basic_string&amp;lt;char&amp;gt; und operator+ on Sun, 30 Aug 2009 20:51:05 GMT]]></title><description><![CDATA[<p>Lass das Vorhaben. Du solltest niemals von <code>std::basic_string&lt;char&gt;</code> erben, dafür wurde diese Klasse nicht konzipiert. (Keine virtuellen Funktionen z.B.)</p>
<p>Was willst du erreichen? Wenn du gemische Arithmetik von einer eigenen String-Klasse willst, musst du global den Operator + definieren und als Parameter 2 Stringobjekte. Der Compiler wird dann beim Auftreten eines char*s implizit den Copy-Konstruktor aufrufen.</p>
<p>Aber definiere erst mal 'nen eigenen String (verwaltetes dynamisches Char-Array)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1769500</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769500</guid><dc:creator><![CDATA[Ad aCTa]]></dc:creator><pubDate>Sun, 30 Aug 2009 20:51:05 GMT</pubDate></item><item><title><![CDATA[Reply to Ctor bei basic_string&amp;lt;char&amp;gt; und operator+ on Sun, 30 Aug 2009 20:53:56 GMT]]></title><description><![CDATA[<p>Aja, alles klar, danke für die Antwort.<br />
Sinn und Zweck der Vererbung war, dass ich den bestehenden basic_string&lt;char&gt; um einige Methoden erweitern wollte, die ich persönlich gerne hätte um &quot;gemütlicher&quot; programmieren zu können (z.B. simple ToUpper/Lower Methoden, oder sprintf) -- re-implementieren will ich da auch nichts, daher stört mich das Fehlen von virtuellen Methoden auch nicht.</p>
<p>Das mit dem globalen &quot;+&quot;-Operator werde ich mal ausporbieren.</p>
<p>Danke <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/1769502</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769502</guid><dc:creator><![CDATA[PuerNoctis]]></dc:creator><pubDate>Sun, 30 Aug 2009 20:53:56 GMT</pubDate></item><item><title><![CDATA[Reply to Ctor bei basic_string&amp;lt;char&amp;gt; und operator+ on Sun, 30 Aug 2009 20:57:38 GMT]]></title><description><![CDATA[<p>Nur bitte erbe nicht von <code>string</code> , das ist ein recht übles Ding. <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/1769506</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769506</guid><dc:creator><![CDATA[Ad aCTa]]></dc:creator><pubDate>Sun, 30 Aug 2009 20:57:38 GMT</pubDate></item><item><title><![CDATA[Reply to Ctor bei basic_string&amp;lt;char&amp;gt; und operator+ on Sun, 30 Aug 2009 21:44:50 GMT]]></title><description><![CDATA[<p>Nur um Funktionalität hinzuzufügen, kannst du globale Funktionen definieren. Viele Leute sind der Ansicht, dass <code>std::string</code> sowieso bereits zu viele Methoden hat. In C++ ist (z.B. im Gegensatz zu Java) nicht alles eine Klasse, und entsprechend macht es keinen Sinn, alles so hinzubiegen.</p>
<p>Ich würde das so lösen:</p>
<pre><code class="language-cpp">void transform_to_upper(std::string&amp; str);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1769527</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769527</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 30 Aug 2009 21:44:50 GMT</pubDate></item><item><title><![CDATA[Reply to Ctor bei basic_string&amp;lt;char&amp;gt; und operator+ on Mon, 31 Aug 2009 08:19:11 GMT]]></title><description><![CDATA[<p>Oke, danke für die Antworten <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="🙂"
    /><br />
Ich werde dann von 'ner Vererbung absehen und das mit globalen Funktionen lösen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1769604</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769604</guid><dc:creator><![CDATA[PuerNoctis]]></dc:creator><pubDate>Mon, 31 Aug 2009 08:19:11 GMT</pubDate></item></channel></rss>