<?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[Operatorüberladung]]></title><description><![CDATA[<p>Hi,</p>
<p>ich würde gerne Operatoren überladen um schlussendlich folgendes zu ermöglichen:</p>
<pre><code class="language-cpp">Values vals;
vals[0] = new ValueObject(&quot;myValue&quot;);
std::cout &lt;&lt; vals[0]-&gt;getValue() &lt;&lt; std::endl;
</code></pre>
<p>Ich habe auch schon fast alles geschafft. Aber es scheitert daran so etwas zu machen:</p>
<pre><code class="language-cpp">vals[0] = new ValueObject(&quot;...);
</code></pre>
<p>Den Indexoperator habe ich bereits überladen. Nun müsste ich vermutlich noch den Zuweisungsoperator überladen, aber das scheint in Verbindung mit dem Indexoperator sehr schwierig zu sein. Ist das überhaupt möglich? Wenn ja, wie mache ich das?<br />
Danke :xmas2:</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/230661/operatorüberladung</link><generator>RSS for Node</generator><lastBuildDate>Sun, 27 Sep 2026 04:08:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/230661.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 30 Dec 2008 15:04:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Operatorüberladung on Tue, 30 Dec 2008 15:04:38 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich würde gerne Operatoren überladen um schlussendlich folgendes zu ermöglichen:</p>
<pre><code class="language-cpp">Values vals;
vals[0] = new ValueObject(&quot;myValue&quot;);
std::cout &lt;&lt; vals[0]-&gt;getValue() &lt;&lt; std::endl;
</code></pre>
<p>Ich habe auch schon fast alles geschafft. Aber es scheitert daran so etwas zu machen:</p>
<pre><code class="language-cpp">vals[0] = new ValueObject(&quot;...);
</code></pre>
<p>Den Indexoperator habe ich bereits überladen. Nun müsste ich vermutlich noch den Zuweisungsoperator überladen, aber das scheint in Verbindung mit dem Indexoperator sehr schwierig zu sein. Ist das überhaupt möglich? Wenn ja, wie mache ich das?<br />
Danke :xmas2:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1637303</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1637303</guid><dc:creator><![CDATA[Muhhh]]></dc:creator><pubDate>Tue, 30 Dec 2008 15:04:38 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladung on Tue, 30 Dec 2008 15:14:15 GMT]]></title><description><![CDATA[<p>Dazu müsste man wissen, welchen Typ der Indexoperator [] zurückgibt. Eigentlich sollte dieser nämlich einen öffentlichen Zuweisungsoperator besitzen.</p>
<p>Was geht denn überhaupt nicht? Gewöhn dir immer gleich an, die Fehlermeldung anzugeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1637311</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1637311</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 30 Dec 2008 15:14:15 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladung on Tue, 30 Dec 2008 15:24:52 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Dazu müsste man wissen, welchen Typ der Indexoperator [] zurückgibt. Eigentlich sollte dieser nämlich einen öffentlichen Zuweisungsoperator besitzen.</p>
<p>Was geht denn überhaupt nicht? Gewöhn dir immer gleich an, die Fehlermeldung anzugeben.</p>
</blockquote>
<p>Der Indexoperator gibt ein <code>ValueObject *</code> zurück und ist in der Klasse deklariert worden. Ist das falsch? Muss er da raus? Das Problem ist nämlich, wenn ich versuche einen Zuweisungsoperator zu deklarieren, dann wird dieser nie aufgerufen. Außer ich rufe ihn explizit auf:</p>
<p><code>vals[0].operator=(ValueObject(&quot;blub&quot;));</code></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1637325</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1637325</guid><dc:creator><![CDATA[Muhhh]]></dc:creator><pubDate>Tue, 30 Dec 2008 15:24:52 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladung on Tue, 30 Dec 2008 15:27:38 GMT]]></title><description><![CDATA[<p>Muhhh schrieb:</p>
<blockquote>
<p>Der Indexoperator [...] ist in der Klasse deklariert worden. Ist das falsch? Muss er da raus?</p>
</blockquote>
<p>Nein, das ist schon okay so. Der <code>operator[]</code> muss in der Klasse deklariert sein.</p>
<p>Muhhh schrieb:</p>
<blockquote>
<p>Das Problem ist nämlich, wenn ich versuche einen Zuweisungsoperator zu deklarieren, dann wird dieser nie aufgerufen.</p>
</blockquote>
<p>Du weist ja einen Zeiger zu. Für skalare Datentypen kannst du keine Operatoren überladen. Du musst also nichts tun, der Zeiger wird automatisch zugewiesen.</p>
<p>Was geht denn eigentlich nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1637327</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1637327</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 30 Dec 2008 15:27:38 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladung on Tue, 30 Dec 2008 15:32:59 GMT]]></title><description><![CDATA[<p>der op[] gibt nen zeiger zurück? wäre nicht toll. besser, er gibt ne referenz auf nen zeiger zurück.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1637331</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1637331</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 30 Dec 2008 15:32:59 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladung on Tue, 30 Dec 2008 17:27:54 GMT]]></title><description><![CDATA[<p>Es gibt einfach nur folgendes Problem:</p>
<p>Ich müsste sowas machen:</p>
<p>`delete vals[0];</p>
<p>vals[0] = new Object(&quot;blub...&quot;);`</p>
<p>Ich dachte mir ich könnte die Klasse so entwefen das sie dies automatisch erledigt. Allerdings scheint das nicht so zu klappen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1637388</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1637388</guid><dc:creator><![CDATA[Muhhh]]></dc:creator><pubDate>Tue, 30 Dec 2008 17:27:54 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladung on Tue, 30 Dec 2008 17:38:31 GMT]]></title><description><![CDATA[<p>Muhhh schrieb:</p>
<blockquote>
<p>Ich dachte mir ich könnte die Klasse so entwefen das sie dies automatisch erledigt. Allerdings scheint das nicht so zu klappen...</p>
</blockquote>
<p>ich befürchte, ich habe mal sowas ähnliches gesehen:</p>
<pre><code class="language-cpp">struct Proxy
{
  ValueObject* data;
  operator ValueObject*()
  {
    return data;
  }
  Proxy operator=(ValueObject* nd)
  {
    delete data;
    data=nd;
  }
};
Proxy Value::operator[](size_t index)
{
  return Proxy(data[index]);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1637393</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1637393</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 30 Dec 2008 17:38:31 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladung on Tue, 30 Dec 2008 18:11:52 GMT]]></title><description><![CDATA[<p>Muhhh schrieb:</p>
<blockquote>
<p>Ich dachte mir ich könnte die Klasse so entwefen das sie dies automatisch erledigt. Allerdings scheint das nicht so zu klappen...</p>
</blockquote>
<p>Du kannst der Klasse auch Memberfunktionen hinzufügen, die das für dich automatisch erledigen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1637413</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1637413</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 30 Dec 2008 18:11:52 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladung on Tue, 30 Dec 2008 18:27:45 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Muhhh schrieb:</p>
<blockquote>
<p>Ich dachte mir ich könnte die Klasse so entwefen das sie dies automatisch erledigt. Allerdings scheint das nicht so zu klappen...</p>
</blockquote>
<p>Du kannst der Klasse auch Memberfunktionen hinzufügen, die das für dich automatisch erledigen.</p>
</blockquote>
<p>ich habe nun die zwei Memberfunktionen <code>getAt(unsigned int pos)</code> und <code>setAt(unsigned int pos, NewValue)</code> geschrieben. So ist es glaube besser verständlich und sauberer, oder? <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/1637426</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1637426</guid><dc:creator><![CDATA[Muhhh]]></dc:creator><pubDate>Tue, 30 Dec 2008 18:27:45 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladung on Wed, 31 Dec 2008 13:41:53 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;vector&gt;

using std::vector;

class Values
{
public:
    ValueObject *&amp;operator [] (unsigned pos)
    {
        if (pos &gt;= vec.size())
            vec.resize(pos + 1);
        return vec[pos];
    }
priavte:
    vector&lt;ValueObject *&gt; vec;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1637719</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1637719</guid><dc:creator><![CDATA[helferlein]]></dc:creator><pubDate>Wed, 31 Dec 2008 13:41:53 GMT</pubDate></item></channel></rss>