<?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,<br />
ist es möglich den Indexoperator für mehrdimensionale Arrays zu überladen?<br />
Mein Versuch:</p>
<pre><code>T&amp; operator[][](int firstIndex, int secondIndex) {
		assert(firstIndex &lt; zeilen &amp;&amp; secondIndex &lt; spalten);
		return ptr[firstIndex*spalten + secondIndex];
	}
	const T&amp; operator[][](int firstIndex, int secondIndex) const {
		assert(firstIndex &lt; zeilen &amp;&amp; secondIndex &lt; spalten);
		return ptr[firstIndex*spalten + secondIndex];
	}
</code></pre>
<p>Konstruktor etc. der Klasse sind so weit inordnung. Wenn ich die Klasse in main instanziiere:</p>
<pre><code>Array2d&lt;int&gt; arr(2, 5);
</code></pre>
<p>und anschließend die Indexoperatoren verwenden will:</p>
<pre><code>for (size_t i = 0; i &lt; arr.getZeilen(); ++i) {
		for (size_t j = 0; j &lt; arr.getSpalten(); ++j) {
			arr[i][j] = i*j;
		}
	}
</code></pre>
<p>wirft der Compiler folgende Fehlermeldung:</p>
<pre><code>Severity	Code	Description	Project	File	Line
Error		IntelliSense: no operator &quot;[]&quot; matches these operands
            operand types are: Array2d&lt;int&gt; [ size_t ]
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/332827/operatorüberladung</link><generator>RSS for Node</generator><lastBuildDate>Mon, 27 Apr 2026 10:55:35 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/332827.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 24 May 2015 15:12:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Operatorüberladung on Sun, 24 May 2015 15:12:39 GMT]]></title><description><![CDATA[<p>Hi,<br />
ist es möglich den Indexoperator für mehrdimensionale Arrays zu überladen?<br />
Mein Versuch:</p>
<pre><code>T&amp; operator[][](int firstIndex, int secondIndex) {
		assert(firstIndex &lt; zeilen &amp;&amp; secondIndex &lt; spalten);
		return ptr[firstIndex*spalten + secondIndex];
	}
	const T&amp; operator[][](int firstIndex, int secondIndex) const {
		assert(firstIndex &lt; zeilen &amp;&amp; secondIndex &lt; spalten);
		return ptr[firstIndex*spalten + secondIndex];
	}
</code></pre>
<p>Konstruktor etc. der Klasse sind so weit inordnung. Wenn ich die Klasse in main instanziiere:</p>
<pre><code>Array2d&lt;int&gt; arr(2, 5);
</code></pre>
<p>und anschließend die Indexoperatoren verwenden will:</p>
<pre><code>for (size_t i = 0; i &lt; arr.getZeilen(); ++i) {
		for (size_t j = 0; j &lt; arr.getSpalten(); ++j) {
			arr[i][j] = i*j;
		}
	}
</code></pre>
<p>wirft der Compiler folgende Fehlermeldung:</p>
<pre><code>Severity	Code	Description	Project	File	Line
Error		IntelliSense: no operator &quot;[]&quot; matches these operands
            operand types are: Array2d&lt;int&gt; [ size_t ]
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2454624</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2454624</guid><dc:creator><![CDATA[indexer]]></dc:creator><pubDate>Sun, 24 May 2015 15:12:39 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladung on Sun, 24 May 2015 15:17:21 GMT]]></title><description><![CDATA[<p>Einen operator[][] gibt es nicht. Bau Dir einen operator[], der ein Proxy-Objekt, also eine Sicht auf eine Zeile Deiner Matrix zurückgibt. Und die Zeile hat dann wieder einen operator[]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2454627</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2454627</guid><dc:creator><![CDATA[SG1]]></dc:creator><pubDate>Sun, 24 May 2015 15:17:21 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladung on Sun, 24 May 2015 15:19:11 GMT]]></title><description><![CDATA[<p>Nein du kannst keinen operator[][] überladen. Es gibt aber eine Reihe von anderen Möglichkeiten. Du überlädst normal den operator[], der dann ein Objekt zurückgibt für das es wieder einen operator[] gibt. Das einfachste wäre einfach einen Pointer zu nehmen, es kann aber auch irgendeine Helper Klasse sein. Mit dem Pointer würde es dann so aussehen:</p>
<pre><code>T* operator[] (int firstIndex) {
  assert(firstIndex &lt; zeilen);
  return &amp;ptr[firstIndex*spalten];
}
</code></pre>
<p>Du verlierst aber dadurch aber die Möglichkeit ein assert für den zweiten Index einzubauen. Dafür müsstest du eine Helper Klasse nutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2454628</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2454628</guid><dc:creator><![CDATA[sebi707]]></dc:creator><pubDate>Sun, 24 May 2015 15:19:11 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladung on Sun, 24 May 2015 15:25:25 GMT]]></title><description><![CDATA[<p>Nice, dankö <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/2454629</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2454629</guid><dc:creator><![CDATA[indexer]]></dc:creator><pubDate>Sun, 24 May 2015 15:25:25 GMT</pubDate></item><item><title><![CDATA[Reply to Operatorüberladung on Tue, 26 May 2015 09:43:44 GMT]]></title><description><![CDATA[<p>Du kannst den operator() überladen und ihm beliebig viele Argumente mitgeben.</p>
<pre><code>T&amp; Array2D::operator()( std::size_t RowIndex, std::size_t ColIndex )
{
   ...
}

int main()
{
   Array2D&lt;double&gt; arr;
   ...
   double v = arr( 0,1 );
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2454784</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2454784</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Tue, 26 May 2015 09:43:44 GMT</pubDate></item></channel></rss>