<?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[]]]></title><description><![CDATA[<p>Hi,</p>
<p>ich hab mir einen eigenen Container geschrieben der wie ein vector funktionieren soll. Dieser Container speichert Zeiger auf meine Klasse &quot;Daten&quot;.</p>
<p>Jetzt möchte ich den operator [] schreiben. Allerdings weis ich nicht so richtig wann (und vor allem warum) man da ein Konstantes Objekt oder so zurückgeben soll. Oder ab wann man (unwissentlich) eine lokale Kopie zurückgibt.</p>
<p>Hier mal das was ich bis jetzt geschrieben hab:</p>
<pre><code class="language-cpp">class DatenArray
{
    //weiteres zeugs...

    Daten&amp; operator[]	(size_t index);
private:

    CTypedPtrArray&lt;CPtrArray, Daten*&gt;	m_Daten;
}

Daten&amp; DatenArray::operator[] (size_t index)
{
	ASSERT(CheckIndex(index));

	try
	{
		return *(m_Daten[index]);
	}
	catch(.../*CMemoryException&amp; e*/)	
	{
// 		throw e; 
	}
}
</code></pre>
<p>Dieses DatenArray soll zwar Zeiger speichern, aber Referenzen auf die Objekte zurückgeben (mein ganzes Programm arbeitet nur mit Call by Reference)</p>
<p>Und dann hab ich im Forum irgendwo gelesen das man const Referenzen zurückgeben sollte. Aber warum? Mit dem zurückgegebenen Element soll man doch arbeiten können (Member ändern usw...).</p>
<p>Ausserdem hab ich hier noch das Problem, das ich, falls der Index zu groß ist, nicht einfach NULL zurückliefern kann. Das wollte ich lösen in dem ich die Ausnahme abfange und weitereiche. Naja alle meine Versuche das hinzukrigen sind gescheitert (ich kriege die Syntax dafür nicht richtig hin).</p>
<p>Nochmal zusammengefasst: <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 />
Ist meine operator [] Methode nun so richtig oder sollte ich doch lieber const Referenzen zurückliefern? Wie sieht die Syntax zum werfen/weiterreichen einer Ausnahme aus (hab nichts in google gefunden, zumindest konnte ich das nicht umsetzen) ?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/149095/operator</link><generator>RSS for Node</generator><lastBuildDate>Sat, 05 Sep 2026 02:38:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/149095.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 02 Jun 2006 10:34:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to operator[] on Fri, 02 Jun 2006 10:35:34 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich hab mir einen eigenen Container geschrieben der wie ein vector funktionieren soll. Dieser Container speichert Zeiger auf meine Klasse &quot;Daten&quot;.</p>
<p>Jetzt möchte ich den operator [] schreiben. Allerdings weis ich nicht so richtig wann (und vor allem warum) man da ein Konstantes Objekt oder so zurückgeben soll. Oder ab wann man (unwissentlich) eine lokale Kopie zurückgibt.</p>
<p>Hier mal das was ich bis jetzt geschrieben hab:</p>
<pre><code class="language-cpp">class DatenArray
{
    //weiteres zeugs...

    Daten&amp; operator[]	(size_t index);
private:

    CTypedPtrArray&lt;CPtrArray, Daten*&gt;	m_Daten;
}

Daten&amp; DatenArray::operator[] (size_t index)
{
	ASSERT(CheckIndex(index));

	try
	{
		return *(m_Daten[index]);
	}
	catch(.../*CMemoryException&amp; e*/)	
	{
// 		throw e; 
	}
}
</code></pre>
<p>Dieses DatenArray soll zwar Zeiger speichern, aber Referenzen auf die Objekte zurückgeben (mein ganzes Programm arbeitet nur mit Call by Reference)</p>
<p>Und dann hab ich im Forum irgendwo gelesen das man const Referenzen zurückgeben sollte. Aber warum? Mit dem zurückgegebenen Element soll man doch arbeiten können (Member ändern usw...).</p>
<p>Ausserdem hab ich hier noch das Problem, das ich, falls der Index zu groß ist, nicht einfach NULL zurückliefern kann. Das wollte ich lösen in dem ich die Ausnahme abfange und weitereiche. Naja alle meine Versuche das hinzukrigen sind gescheitert (ich kriege die Syntax dafür nicht richtig hin).</p>
<p>Nochmal zusammengefasst: <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 />
Ist meine operator [] Methode nun so richtig oder sollte ich doch lieber const Referenzen zurückliefern? Wie sieht die Syntax zum werfen/weiterreichen einer Ausnahme aus (hab nichts in google gefunden, zumindest konnte ich das nicht umsetzen) ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1069996</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1069996</guid><dc:creator><![CDATA[Chris++ 0]]></dc:creator><pubDate>Fri, 02 Jun 2006 10:35:34 GMT</pubDate></item><item><title><![CDATA[Reply to operator[] on Fri, 02 Jun 2006 10:40:39 GMT]]></title><description><![CDATA[<p>1. Ja, der Aufbau ist so richtig - wenn du das zurückgegebene Element ändern willst, mußt du eine nichtkonstante Referenz übergeben.</p>
<p>(const Referenz kannst du für die const-Version des Operators verwenden)</p>
<p>2. try/catch dient zum Abfangen fremder Exceptions - eigene Exceptions wirfst du mit throw (anstelle deines ASSERT)</p>
<pre><code class="language-cpp">if(!CheckIndex(index)
  throw CMyException(&quot;Fehler in op[]&quot;);
...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1069997</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1069997</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 02 Jun 2006 10:40:39 GMT</pubDate></item><item><title><![CDATA[Reply to operator[] on Fri, 02 Jun 2006 10:47:54 GMT]]></title><description><![CDATA[<p>danke</p>
<p>CStoll schrieb:</p>
<blockquote>
<p>1. Ja, der Aufbau ist so richtig - wenn du das zurückgegebene Element ändern willst, mußt du eine nichtkonstante Referenz übergeben.</p>
<p>(const Referenz kannst du für die const-Version des Operators verwenden)</p>
</blockquote>
<p>wofür brauch man die const-Version?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1070003</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1070003</guid><dc:creator><![CDATA[Chris++ 0]]></dc:creator><pubDate>Fri, 02 Jun 2006 10:47:54 GMT</pubDate></item><item><title><![CDATA[Reply to operator[] on Fri, 02 Jun 2006 10:51:45 GMT]]></title><description><![CDATA[<p>Wenn du deine Klasse als Konstante weitergibst, kannst du nur Methoden aufrufen, die mit &quot;const&quot; markiert sind:</p>
<pre><code class="language-cpp">void do_something(const DatenArray&amp; data)
{
  //hier kannst du den &quot;normalen&quot; op[] nicht verwenden, stattdessen brauchst du
  //const Daten&amp; operator[](size_t index) const;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1070004</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1070004</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 02 Jun 2006 10:51:45 GMT</pubDate></item><item><title><![CDATA[Reply to operator[] on Fri, 02 Jun 2006 10:51:52 GMT]]></title><description><![CDATA[<p>Chris++ schrieb:</p>
<blockquote>
<p>wofür brauch man die const-Version?</p>
</blockquote>
<p>Für den Zugriff auf die Elemente eines const DatenArray.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1070005</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1070005</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Fri, 02 Jun 2006 10:51:52 GMT</pubDate></item><item><title><![CDATA[Reply to operator[] on Fri, 02 Jun 2006 10:57:02 GMT]]></title><description><![CDATA[<p>perfekt, jetzt klappts <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1070012</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1070012</guid><dc:creator><![CDATA[Chris++ 0]]></dc:creator><pubDate>Fri, 02 Jun 2006 10:57:02 GMT</pubDate></item></channel></rss>