<?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[Klasse, deren Objekte sich wie primitive Datentypen verhalten.]]></title><description><![CDATA[<p>Hallo C++ler,</p>
<p>Nehmen wir die folgende Deklaration einer Klasse an:</p>
<pre><code>template &lt;class T&gt;
class SomeValue
{
    public:
        T value;

        SomeValue( T value ): value( value ) {}
};
</code></pre>
<p>Gibt es eine Möglichkeit, dass ein Objekt dieser Klasse selbst den Wert repräsentiert, also dass</p>
<pre><code>int main()
{
    SomeValue&lt;double&gt; real( 3.1415 );

    std::cout &lt;&lt; real &lt;&lt; std::endl;

    return 0;
}
</code></pre>
<p>den Wert &quot;3.1415&quot; ausgibt (ohne Definition des operators&lt;&lt; für diese Klasse)?</p>
<p>Vielen Dank.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/276214/klasse-deren-objekte-sich-wie-primitive-datentypen-verhalten</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 12:56:55 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/276214.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 29 Oct 2010 08:08:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klasse, deren Objekte sich wie primitive Datentypen verhalten. on Fri, 29 Oct 2010 08:08:04 GMT]]></title><description><![CDATA[<p>Hallo C++ler,</p>
<p>Nehmen wir die folgende Deklaration einer Klasse an:</p>
<pre><code>template &lt;class T&gt;
class SomeValue
{
    public:
        T value;

        SomeValue( T value ): value( value ) {}
};
</code></pre>
<p>Gibt es eine Möglichkeit, dass ein Objekt dieser Klasse selbst den Wert repräsentiert, also dass</p>
<pre><code>int main()
{
    SomeValue&lt;double&gt; real( 3.1415 );

    std::cout &lt;&lt; real &lt;&lt; std::endl;

    return 0;
}
</code></pre>
<p>den Wert &quot;3.1415&quot; ausgibt (ohne Definition des operators&lt;&lt; für diese Klasse)?</p>
<p>Vielen Dank.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1972230</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1972230</guid><dc:creator><![CDATA[flowerJT]]></dc:creator><pubDate>Fri, 29 Oct 2010 08:08:04 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse, deren Objekte sich wie primitive Datentypen verhalten. on Fri, 29 Oct 2010 08:21:21 GMT]]></title><description><![CDATA[<p>Ganuz ohne Operatorenüberladung wirst du nicht auskommen, denk ich, aber wenn dir &lt;&lt; zu viel Aufwand oder zu spezifisch ist könntest du die entsprechenden Konvertierungsoperatoren definieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1972231</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1972231</guid><dc:creator><![CDATA[Famer]]></dc:creator><pubDate>Fri, 29 Oct 2010 08:21:21 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse, deren Objekte sich wie primitive Datentypen verhalten. on Fri, 29 Oct 2010 08:23:59 GMT]]></title><description><![CDATA[<p>Ich weiß nicht ob das hinhaut:</p>
<pre><code class="language-cpp">template &lt;class T&gt; 
class foo {
    T operator T();
};
</code></pre>
<p>vielleicht ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1972232</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1972232</guid><dc:creator><![CDATA[Famer]]></dc:creator><pubDate>Fri, 29 Oct 2010 08:23:59 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse, deren Objekte sich wie primitive Datentypen verhalten. on Fri, 29 Oct 2010 08:30:48 GMT]]></title><description><![CDATA[<p>Die Ausgabe via &quot;std::ostream&quot; sollte nur ein Beispiel sein. Mir geht es vielmehr darum, dass das Objekt &quot;real&quot; im obigen Beispiel selbst den Wert &quot;T&quot; (also double) annimmt, denn dafür gäbe es ja einen Operator &lt;&lt;.</p>
<p>Vielen Dank.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1972238</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1972238</guid><dc:creator><![CDATA[flowerJT]]></dc:creator><pubDate>Fri, 29 Oct 2010 08:30:48 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse, deren Objekte sich wie primitive Datentypen verhalten. on Fri, 29 Oct 2010 08:39:06 GMT]]></title><description><![CDATA[<p>Ich glaube was du suchst ist ein Konvertierungsoperator.</p>
<pre><code class="language-cpp">operator double(){return value;}
</code></pre>
<p>Das funktioniert natürlich nur, wenn der Kontext eindeutig ist.</p>
<p>Aber: Genau für das gezeigte ist die Operatorüberladung doch da, warum willst du sie nicht benutzen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1972239</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1972239</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 29 Oct 2010 08:39:06 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse, deren Objekte sich wie primitive Datentypen verhalten. on Fri, 29 Oct 2010 09:47:29 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template &lt;class T&gt;
class SomeValue
{
  T value;
public:
  SomeValue(T value) : value(value) {}
  operator T() const { return value; }
};
</code></pre>
<p>So geht das.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1972269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1972269</guid><dc:creator><![CDATA[tierung]]></dc:creator><pubDate>Fri, 29 Oct 2010 09:47:29 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse, deren Objekte sich wie primitive Datentypen verhalten. on Fri, 29 Oct 2010 09:54:17 GMT]]></title><description><![CDATA[<p>Oder noch besser so:</p>
<pre><code class="language-cpp">#define implicit // contrary of `explicit' keyword
template &lt;class T&gt;
class SomeValue
{
  T value;
public:
  implicit SomeValue(T value) : value(value) {}
  operator T () const { return value; }
  operator T&amp;()       { return value; }
};
</code></pre>
<p>Gebrauch:</p>
<pre><code class="language-cpp">SomeValue&lt;double&gt; real(3.14159);
std::cout &lt;&lt; real &lt;&lt; std::endl;
double d = 2 * real;
std::cin &gt;&gt; real;
real = std::pow(d, real);
std::cout &lt;&lt; real &lt;&lt; std::endl;
</code></pre>
<p>Verhält sich wie ein normaler double.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1972275</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1972275</guid><dc:creator><![CDATA[tierung]]></dc:creator><pubDate>Fri, 29 Oct 2010 09:54:17 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse, deren Objekte sich wie primitive Datentypen verhalten. on Fri, 29 Oct 2010 09:56:47 GMT]]></title><description><![CDATA[<p>Super. Vielen Dank.</p>
<p>Genau was ich gesucht habe <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>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1972276</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1972276</guid><dc:creator><![CDATA[flowerJT]]></dc:creator><pubDate>Fri, 29 Oct 2010 09:56:47 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse, deren Objekte sich wie primitive Datentypen verhalten. on Fri, 29 Oct 2010 10:28:04 GMT]]></title><description><![CDATA[<p>Benutzt aler auch &quot;operator-Überladung&quot; - nur halt nicht von jedem einzeln, sondern nur vom Konvertierungsoperator.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1972286</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1972286</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Fri, 29 Oct 2010 10:28:04 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse, deren Objekte sich wie primitive Datentypen verhalten. on Fri, 29 Oct 2010 10:28:27 GMT]]></title><description><![CDATA[<p>Aber vor der extensiven Verwendung dieses Operators wird nicht umsonst gewarnt!</p>
<p>In vielen Faellen in der Praxis wo mir das unterkommt ist es nicht nuetzlich sondern eher gefaehrlich (weil die typpruefung von c++ überlistet/ausgehebelt wird).<br />
In anderen aber wenigen Faellen ist es wiederum durchaus Sinnig. Also mit Bedacht verwenden !</p>
<p>in den meisten Faellen wo die impliziete konvertierung nicht sinnvoll ist, ist die Überladung aller benoetigten operatoren der bessere Weg. Ist zwar mehr Aufwand, man hat aber viel mehr kontrolle.<br />
Und Lösungen nur weil sie weniger SchreibAufwand bedeuten -&gt; schlechte Lösungen.</p>
<p>Also bleibt die Frage:<br />
Wenn sich das Ding bspweisse verhalten soll wie in double, warum ist es dann kein double ? Warum willst du den double quasi ersetzen ?</p>
<p>Ciao ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1972287</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1972287</guid><dc:creator><![CDATA[RHBaum]]></dc:creator><pubDate>Fri, 29 Oct 2010 10:28:27 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse, deren Objekte sich wie primitive Datentypen verhalten. on Fri, 29 Oct 2010 11:54:54 GMT]]></title><description><![CDATA[<p>flowerJT schrieb:</p>
<blockquote>
<p>Genau was ich gesucht habe <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>
</blockquote>
<p>Nein! Ob du nun den Streamoperator &lt;&lt; ueberlaedst oder einen Konvertierungsoperator implementierst, ist ja egal. Uebrigens ist ja Operatorueberladung genau dafuer da, dass sich eigene Typen wie primitive verhalten. Aus Faulheit sich diese zu sparen, ist meist keine gute Idee.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1972309</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1972309</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Fri, 29 Oct 2010 11:54:54 GMT</pubDate></item></channel></rss>