<?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[Aufrufoperator () überladen]]></title><description><![CDATA[<p>Hi, ich habe folgendes Problem:<br />
Ich will über einen Aufrufoperator auf meine Matrizen zugreifen.<br />
So siehts bei mir bis jetzt aus:</p>
<pre><code class="language-cpp">class Test
{
private:
	double **m1;	//Matrix 1
	double **m2;	//Matrix 2
public:
      int operator()(int a, int b);	    //Aufrufoperator

      ....
};

int Test::operator()(int a,int b)
{
      return m1[a][b];
};

void main()
{
      Test t;
	cout&lt;&lt;t(0,1)&lt;&lt;endl;
};
</code></pre>
<p>Wenn ich es allerdings so mache, kann ich ja bloß auf m1 zugreifen, und nicht mit dem überladenen Operator auf m2!!!! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Ich hoffe es ist einigermaßen verständlich, was mein Problem ist!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/135352/aufrufoperator-überladen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 28 Aug 2026 22:11:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/135352.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 01 Feb 2006 14:41:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Aufrufoperator () überladen on Wed, 01 Feb 2006 14:41:37 GMT]]></title><description><![CDATA[<p>Hi, ich habe folgendes Problem:<br />
Ich will über einen Aufrufoperator auf meine Matrizen zugreifen.<br />
So siehts bei mir bis jetzt aus:</p>
<pre><code class="language-cpp">class Test
{
private:
	double **m1;	//Matrix 1
	double **m2;	//Matrix 2
public:
      int operator()(int a, int b);	    //Aufrufoperator

      ....
};

int Test::operator()(int a,int b)
{
      return m1[a][b];
};

void main()
{
      Test t;
	cout&lt;&lt;t(0,1)&lt;&lt;endl;
};
</code></pre>
<p>Wenn ich es allerdings so mache, kann ich ja bloß auf m1 zugreifen, und nicht mit dem überladenen Operator auf m2!!!! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Ich hoffe es ist einigermaßen verständlich, was mein Problem ist!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/983101</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/983101</guid><dc:creator><![CDATA[rgHorus]]></dc:creator><pubDate>Wed, 01 Feb 2006 14:41:37 GMT</pubDate></item><item><title><![CDATA[Reply to Aufrufoperator () überladen on Wed, 01 Feb 2006 14:47:37 GMT]]></title><description><![CDATA[<p>Du könntest dem Operator z.B. noch einen dritten Parameter geben, aus dem du die auszugebende Matrix ermittelst:</p>
<pre><code class="language-cpp">int Test::operator()(int a,int b,bool snd=false)
{
  if(!snd)
    return m1[a][b];
  else
    return m2[a][b];
}

...

Test t;
cout&lt;&lt;&quot;m1:&quot;&lt;&lt;t(1,0)&lt;&lt;endl;
cout&lt;&lt;&quot;m2:&quot;&lt;&lt;t(1,0,true)&lt;&lt;endl;
</code></pre>
<p>(alternativ kannst du auch aus a und/oder b berechnen, aus welcher Matrix die angeforderten Daten stammen könnten)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/983109</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/983109</guid><dc:creator><![CDATA[CStoll (off)]]></dc:creator><pubDate>Wed, 01 Feb 2006 14:47:37 GMT</pubDate></item><item><title><![CDATA[Reply to Aufrufoperator () überladen on Wed, 01 Feb 2006 14:48:51 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class Test
{
private:
    double **m1;    //Matrix 1
    double **m2;    //Matrix 2
public:
      static const int M1 = 1;
      static const int M2 = 2;
      int operator()(int dummy, int a, int b);        //Aufrufoperator

      ....
};
int Test::M1;
int Text::M2;

int Test::operator()(int dummy, int a,int b)
{
   if( dummy == 1 )
      return m1[a][b];
   if( dummy == 2 )
      return m2[a][b]
};

void main()
{
      Test t;
    cout&lt;&lt;t(Test::M2,0,1)&lt;&lt;endl;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/983111</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/983111</guid><dc:creator><![CDATA[OMG]]></dc:creator><pubDate>Wed, 01 Feb 2006 14:48:51 GMT</pubDate></item><item><title><![CDATA[Reply to Aufrufoperator () überladen on Wed, 01 Feb 2006 14:52:30 GMT]]></title><description><![CDATA[<p>Mmmhhhh - so hab ich mir es auch schon überlegt, ich dachte es gibt eine &quot;bessere&quot; Möglichkeit!</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/983113</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/983113</guid><dc:creator><![CDATA[rgHorus]]></dc:creator><pubDate>Wed, 01 Feb 2006 14:52:30 GMT</pubDate></item><item><title><![CDATA[Reply to Aufrufoperator () überladen on Wed, 01 Feb 2006 14:55:10 GMT]]></title><description><![CDATA[<p>CStoll (off) schrieb:</p>
<blockquote>
<p>Du könntest dem Operator z.B. noch einen dritten Parameter geben, aus dem du die auszugebende Matrix ermittelst:</p>
<pre><code class="language-cpp">int Test::operator()(int a,int b,bool snd=false)
{
  if(!snd)
    return m1[a];
  else
    return m2[a][b];
}

...

Test t;
cout&lt;&lt;&quot;m1:&quot;&lt;&lt;t(1,0)&lt;&lt;endl;
cout&lt;&lt;&quot;m2:&quot;&lt;&lt;t(1,0,true)&lt;&lt;endl;
</code></pre>
<p><strong>(alternativ kannst du auch aus a und/oder b berechnen, aus welcher Matrix die angeforderten Daten stammen könnten)</strong></p>
</blockquote>
<p>**</p>
<p>Bei deinem operator() sollte man das [b]else** weglassen da du überhaupt nichts zurückgibst. Zwar kann es nicht zu dem Fall kommen das nichts zurückgegeben wird aber ob alle Compiler das so akzeptieren... von daher einfach weglassen und keine Warnung vom Compiler bekommen <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">int Test::operator()(int a,int b,bool snd=false)
{
  if(!snd)
    return m1[a][b];
  return m2[a][b];
}
</code></pre>
<p>Ausserdem sollte man sich immer dran gewöhnen bei non-void Funktionen/Methoden immer etwas zurück zugeben um undefiniertes Verhalten zu vermeiden.</p>
<p>BR<br />
evilissimo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/983119</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/983119</guid><dc:creator><![CDATA[evilissimo]]></dc:creator><pubDate>Wed, 01 Feb 2006 14:55:10 GMT</pubDate></item><item><title><![CDATA[Reply to Aufrufoperator () überladen on Wed, 01 Feb 2006 14:56:38 GMT]]></title><description><![CDATA[<p>rgHorus schrieb:</p>
<blockquote>
<p>Ich hoffe es ist einigermaßen verständlich, was mein Problem ist!</p>
</blockquote>
<p>Ich glaube, dein Problem ist, dass du eigentlich gar nicht genau weißt, was dein Problem ist. Was willst du denn erreichen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/983120</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/983120</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Wed, 01 Feb 2006 14:56:38 GMT</pubDate></item></channel></rss>