<?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[ToString()]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>kann man das ein Wenig schöner machen? Wie kann man bei sprintf alle Nachkommastellen eines double ausgeben lassen?</p>
<pre><code class="language-cpp">string ToString() const
{
	string s(&quot;Node &quot;);
	char temp[50];
	itoa(this-&gt;index, temp, 10);
	s.append(temp);
	s.append(&quot;\n----------\nx: &quot;);
	sprintf(temp, &quot;%f&quot;, this-&gt;x);
	s.append(temp);
	s.append(&quot; y: &quot;);
	sprintf(temp, &quot;%f&quot;, this-&gt;y);
	s.append(temp);
	s.append(&quot; z: &quot;);
	sprintf(temp, &quot;%f&quot;, this-&gt;z);
	s.append(temp);
	s.append(&quot;\nNeighbors: &quot;);
	itoa(this-&gt;n0, temp, 10);
	s.append(temp);
	s.append(&quot; and &quot;);
	itoa(this-&gt;n1, temp, 10);
	s.append(temp);
	return s;
}
</code></pre>
<p>Gruß<br />
Patrick</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/179821/tostring</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 11:08:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/179821.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 25 Apr 2007 15:18:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ToString() on Wed, 25 Apr 2007 15:18:56 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>kann man das ein Wenig schöner machen? Wie kann man bei sprintf alle Nachkommastellen eines double ausgeben lassen?</p>
<pre><code class="language-cpp">string ToString() const
{
	string s(&quot;Node &quot;);
	char temp[50];
	itoa(this-&gt;index, temp, 10);
	s.append(temp);
	s.append(&quot;\n----------\nx: &quot;);
	sprintf(temp, &quot;%f&quot;, this-&gt;x);
	s.append(temp);
	s.append(&quot; y: &quot;);
	sprintf(temp, &quot;%f&quot;, this-&gt;y);
	s.append(temp);
	s.append(&quot; z: &quot;);
	sprintf(temp, &quot;%f&quot;, this-&gt;z);
	s.append(temp);
	s.append(&quot;\nNeighbors: &quot;);
	itoa(this-&gt;n0, temp, 10);
	s.append(temp);
	s.append(&quot; and &quot;);
	itoa(this-&gt;n1, temp, 10);
	s.append(temp);
	return s;
}
</code></pre>
<p>Gruß<br />
Patrick</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1273342</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1273342</guid><dc:creator><![CDATA[PACoSys]]></dc:creator><pubDate>Wed, 25 Apr 2007 15:18:56 GMT</pubDate></item><item><title><![CDATA[Reply to ToString() on Wed, 25 Apr 2007 15:26:20 GMT]]></title><description><![CDATA[<p>Japp, mit C++ <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">#include &lt;sstream&gt;

string ToString() const
{
   ostringstream ost;
// Zeilenumbrüche nur wg. Übersichtlichkeit; kannst auch alles in eine Zeile packen
   ost &lt;&lt; &quot;Node &quot; &lt;&lt; index  
       &lt;&lt; &quot;\n----------\nx: &quot; &lt;&lt; x 
       &lt;&lt; &quot; y: &quot; &lt;&lt; y 
       &lt;&lt; &quot; z: &quot; &lt;&lt; z 
       &lt;&lt; &quot;\nNeighbors: &quot; &lt;&lt; n0  &lt;&lt; &quot; and &quot; &lt;&lt; n1;
   return ost.str();
}
</code></pre>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1273347</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1273347</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 25 Apr 2007 15:26:20 GMT</pubDate></item><item><title><![CDATA[Reply to ToString() on Wed, 25 Apr 2007 15:28:53 GMT]]></title><description><![CDATA[<p>Das ist kein C++ (weder vom Stil noch vom Code her (itoa ist nichtmal C-Standard)).</p>
<p>Wenn du etwas in einen String umwandelst, dann tust du das mit einer faszinierend großen Wahrscheinlichkeit zur Ausgabe (wenn dem nicht so sein sollte, dann müsste der String die Daten tatsächlich repräsentieren).</p>
<p>In C++ benutzt man zur Ein- und Ausgabe Streams (std::cout &lt;&lt; &quot;bla&quot;). Du kannst mit vergleichsweise wenig Aufwand deiner Klasse diese Funktionalität spendieren:</p>
<pre><code class="language-cpp">class bla
{
public:
    inline friend std::ostream&amp; operator&lt;&lt; (std::ostream&amp; os, bla const&amp; obj)
    {
        os &lt;&lt; &quot;Node: x=&quot; &lt;&lt; obj.x &lt;&lt; &quot; y=&quot; &lt;&lt; obj.y &lt;&lt; &quot; z=&quot; &lt;&lt; obj.z;
    }
// bla
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1273348</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1273348</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Wed, 25 Apr 2007 15:28:53 GMT</pubDate></item><item><title><![CDATA[Reply to ToString() on Wed, 25 Apr 2007 15:31:25 GMT]]></title><description><![CDATA[<p>Schönen Dank. Kann man die Anzahl der Nachkommastellen beeinflussen und wenn ja, wie?</p>
<p>Gruß<br />
Patrick</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1273353</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1273353</guid><dc:creator><![CDATA[PACoSys]]></dc:creator><pubDate>Wed, 25 Apr 2007 15:31:25 GMT</pubDate></item><item><title><![CDATA[Reply to ToString() on Wed, 25 Apr 2007 15:42:40 GMT]]></title><description><![CDATA[<p>Hi .filmor,<br />
ein Vorteil von Memberfunktionen ist, dass man sie virtual machen und sich dann die operator&lt;&lt;-en für Kinder sparen kann...<br />
Allerdings hätte ich auch kein ToString(), sondern ein (public) ostream&amp; print(ostream&amp;) genommen...</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1273357</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1273357</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 25 Apr 2007 15:42:40 GMT</pubDate></item><item><title><![CDATA[Reply to ToString() on Wed, 25 Apr 2007 19:44:48 GMT]]></title><description><![CDATA[<p>Mein Posting war an PACoSys gerichtet, ich war nur zu lahm <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="😉"
    /><br />
Mit deinem Code könnte ich micht durchaus anfreunden, nur sehe ich im Moment nicht den Vorteil gegenüber meiner Version, die das ganze mit jedem beliebigen ostream funktionieren lässt.<br />
Wenn ich dich richtig verstanden habe, dann meinst du, dass sich das in der operator&lt;&lt;-Form nicht so toll mit Polymorphie versteht, oder?<br />
Aber dafür benutzt man doch in C++ ein (zumindest bei mir ;)) immer wiederkehrendes Konstrukt (was genau deine virtuelle Methode verwendet, sie aber nicht veröffentlicht):</p>
<pre><code class="language-cpp">class bla
{
public:
    inline friend std::ostream&amp; operator&lt;&lt; (std::ostream&amp; os, bla const&amp; obj)
    {
        obj.do_print (os);
    }
protected:
    virtual void do_print () const;
// bla
};
</code></pre>
<p>Das tuts genauso und fügt sich sauberer in den Streamkram ein.</p>
<p>PACoSys schrieb:</p>
<blockquote>
<p>Schönen Dank. Kann man die Anzahl der Nachkommastellen beeinflussen und wenn ja, wie?</p>
</blockquote>
<p>Kannst du. Entweder über den Manipulator setprecision aus &lt;iomanip&gt; oder über die Elementfunktion precision des ostream-Objektes:</p>
<pre><code class="language-cpp">float f = 3.141592654f;

// 1.
os &lt;&lt; setprecision (10) &lt;&lt; f;
// 2.
os.precision (10);
os &lt;&lt; f;
</code></pre>
<p>In beiden Fällen solltest du (falls du nicht vor /jeder/ Eingabe den Status neu setzen willst) <a href="http://www.boost.org/libs/io/doc/ios_state.html" rel="nofollow">io_state_saver</a> benutzen, damit der Stream nach deiner Ausgabe wieder in den Ausgangszustand versetzt wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1273539</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1273539</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Wed, 25 Apr 2007 19:44:48 GMT</pubDate></item><item><title><![CDATA[Reply to ToString() on Thu, 26 Apr 2007 07:35:18 GMT]]></title><description><![CDATA[<p>Müsste es nicht eher so aussehen?</p>
<pre><code class="language-cpp">class bla
{
public:
    inline friend ostream &amp; operator &lt;&lt; (const bla &amp; obj)
    {
        return obj.do_print();
    }
protected:
    virtual ostream &amp; do_print () const;
};
</code></pre>
<p>Gruß<br />
Patrick</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1273709</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1273709</guid><dc:creator><![CDATA[PACoSys]]></dc:creator><pubDate>Thu, 26 Apr 2007 07:35:18 GMT</pubDate></item><item><title><![CDATA[Reply to ToString() on Thu, 26 Apr 2007 07:47:31 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9606">@filmor</a> Du hast die Referenz für das print vergessen:</p>
<pre><code class="language-cpp">class bla 
{ 
public: 
    virtual std::ostream&amp; print (std::ostream&amp; os) const; 
};

std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, const bla&amp; obj) 
{ 
    return obj.print(os); 
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1273715</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1273715</guid><dc:creator><![CDATA[viande]]></dc:creator><pubDate>Thu, 26 Apr 2007 07:47:31 GMT</pubDate></item><item><title><![CDATA[Reply to ToString() on Thu, 26 Apr 2007 07:57:57 GMT]]></title><description><![CDATA[<p>.filmor schrieb:</p>
<blockquote>
<p>Mein Posting war an PACoSys gerichtet, ...</p>
</blockquote>
<p>Das hatte ich auch so verstanden. <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="😃"
    /><br />
Mir ging es im ersten Blick um die Technik &quot;Wie kann ich Klassenattribute ausgeben ?&quot; .... vA mit den netten C++-Mitteln und ohne das ganze char*-Geraffel.</p>
<p>Dein Code ist genau das, was ich meinte: Eine virtuelle Funktion und ein genereller und &quot;freier&quot; operator&lt;&lt;(). Habe das vielleicht ein wenig zu kurz gefasst mit:</p>
<p>Simon2 schrieb:</p>
<blockquote>
<p>...<br />
ein Vorteil von Memberfunktionen ist, dass man sie virtual machen und sich dann die operator&lt;&lt;-en für Kinder sparen kann...</p>
</blockquote>
<p>PACoSys' ToString()-Methode habe ich als erste Version dieser virtuellen Funktion gesehen (auch wenn ich sie ebenfalls eher print() genannt hätte).</p>
<p>Egal - wir sind uns einig <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>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1273725</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1273725</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 26 Apr 2007 07:57:57 GMT</pubDate></item><item><title><![CDATA[Reply to ToString() on Thu, 26 Apr 2007 10:05:40 GMT]]></title><description><![CDATA[<p>Ich blick's irgendwie nicht mehr ganz. Kann mal bitte jemand das Beispiel berichtigen bzw. vervollständigen?</p>
<p>point.h</p>
<pre><code class="language-cpp">#ifndef POINT_H
#define POINT_H

#include &lt;string&gt;

class Point
{
public:
	Point(double x, double y, double z) : x(x), y(y), z(z) { }
	double GetX() const { return x; }
	double GetY() const { return y; }
	double GetZ() const { return z; }
	string ToString() const
	{
		ostringstream ost;
		ost &lt;&lt; &quot;Node &quot; &lt;&lt; index &lt;&lt; &quot;\n----------\nx: &quot; &lt;&lt; x &lt;&lt; &quot; y: &quot; &lt;&lt; y &lt;&lt; &quot; z: &quot; &lt;&lt; z;
    	return ost.str();
	}
	bool operator == (const Point &amp; crP2) const { return ((x == crP2.GetX()) &amp;&amp; (y == crP2.GetY()) &amp;&amp; (z == crP2.GetZ())); }
private:
	double x;
	double y;
	double z;
};

#endif
</code></pre>
<p>point.cpp =&gt; keine</p>
<p>Gruß<br />
Patrick</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1273808</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1273808</guid><dc:creator><![CDATA[PACoSys]]></dc:creator><pubDate>Thu, 26 Apr 2007 10:05:40 GMT</pubDate></item><item><title><![CDATA[Reply to ToString() on Thu, 26 Apr 2007 10:11:47 GMT]]></title><description><![CDATA[<p>Wenn du jetzt noch den Header &lt;sstream&gt; ergänzt und die Bezeichner string und ostringstream mit std:: korrekt zuordnest, sollte das eigentlich passen.</p>
<p>(und natürlich sollte 'index' auch irgendwo definiert sein, wenn du es verwenden willst ;))</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1273810</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1273810</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 26 Apr 2007 10:11:47 GMT</pubDate></item><item><title><![CDATA[Reply to ToString() on Thu, 26 Apr 2007 16:11:39 GMT]]></title><description><![CDATA[<p>viande schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9606">@filmor</a> Du hast die Referenz für das print vergessen</p>
</blockquote>
<p>Jau.</p>
<p>Simon2 schrieb:</p>
<blockquote>
<p>Egal - wir sind uns einig <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>
</blockquote>
<p>Jau.</p>
<p>PACoSys schrieb:</p>
<blockquote>
<p>Ich blick's irgendwie nicht mehr ganz. Kann mal bitte jemand das Beispiel berichtigen bzw. vervollständigen?</p>
</blockquote>
<p>Entweder so wie CStoll sagte, oder du gehst den C++-igen Weg.<br />
Ich gehe jetzt einfach mal davon aus, dass Point so primitiv bleiben soll, dann erübrigt sich nämlich die Diskussion um virtuelle Funktionen:</p>
<pre><code class="language-cpp">#ifndef POINT_H
#define POINT_H

#include &lt;iosfwd&gt;

class Point
{
public:
    Point(double x, double y, double z) : x(x), y(y), z(z) { }
    double GetX() const { return x; }
    double GetY() const { return y; }
    double GetZ() const { return z; }

    inline friend std::ostream&amp; operator&lt;&lt; (std::ostream&amp; os, Point const&amp; p);
    {
        os &lt;&lt; &quot;Node &quot; &lt;&lt; p.index &lt;&lt; &quot;\n----------\nx: &quot; &lt;&lt; p.x &lt;&lt; &quot; y: &quot; &lt;&lt; p.y &lt;&lt; &quot; z: &quot; &lt;&lt; p.z;
        return os;
    }
    bool operator == (const Point &amp; crP2) const { return ((x == crP2.GetX()) &amp;&amp; (y == crP2.GetY()) &amp;&amp; (z == crP2.GetZ())); }
private:
    double x;
    double y;
    double z;
};

#endif
</code></pre>
<p>Jetzt kannst du beliebige Point Objekte in beliebige Streams stopfen. Du kannst also folgendes alles tun:</p>
<pre><code class="language-cpp">Point e3 (0.0, 0.0, 1.0);

std::cout &lt;&lt; e3;

ostringstream ost;
ost &lt;&lt; e3;
std::string s = ost.str();

ofstream file (&quot;bla&quot;);
file &lt;&lt; e3;
</code></pre>
<p>Na, is das was? <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/1274090</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1274090</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Thu, 26 Apr 2007 16:11:39 GMT</pubDate></item></channel></rss>