<?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[Funktion überladen, jenachdem ob object const ist oder nicht.]]></title><description><![CDATA[<p>Hallo,<br />
ich habe zwei Objekte der Klasse A:</p>
<pre><code>A * a1
const A * a2
</code></pre>
<p>Wie kann ich dafür sorgen, dass der Pointer auf Int im Fall a1 normal, und im Falle a2 const ist? Kann ich das entsprechend überladen, oder muss ich die Funktion zweimal implementieren, einmal als const und einmal als nicht const?</p>
<pre><code>class A{
public:
int * m getM(); // call this, if A is an object.
const int * m getM() const; // call this if A is a const object.
private:
_m
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/263236/funktion-überladen-jenachdem-ob-object-const-ist-oder-nicht</link><generator>RSS for Node</generator><lastBuildDate>Sat, 05 Sep 2026 21:42:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/263236.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 17 Mar 2010 15:44:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktion überladen, jenachdem ob object const ist oder nicht. on Wed, 17 Mar 2010 15:44:21 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe zwei Objekte der Klasse A:</p>
<pre><code>A * a1
const A * a2
</code></pre>
<p>Wie kann ich dafür sorgen, dass der Pointer auf Int im Fall a1 normal, und im Falle a2 const ist? Kann ich das entsprechend überladen, oder muss ich die Funktion zweimal implementieren, einmal als const und einmal als nicht const?</p>
<pre><code>class A{
public:
int * m getM(); // call this, if A is an object.
const int * m getM() const; // call this if A is a const object.
private:
_m
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1870435</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870435</guid><dc:creator><![CDATA[elfstone]]></dc:creator><pubDate>Wed, 17 Mar 2010 15:44:21 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion überladen, jenachdem ob object const ist oder nicht. on Wed, 17 Mar 2010 16:11:57 GMT]]></title><description><![CDATA[<p>elfstone schrieb:</p>
<blockquote>
<p>Kann ich das entsprechend überladen, oder muss ich die Funktion zweimal implementieren, einmal als const und einmal als nicht const?</p>
</blockquote>
<p>Wäre doch beides dasselbe, oder?</p>
<p>...egal, so oder so ja.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870455</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870455</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 17 Mar 2010 16:11:57 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion überladen, jenachdem ob object const ist oder nicht. on Wed, 17 Mar 2010 16:29:50 GMT]]></title><description><![CDATA[<p>Ja, wäre beide male die selbe Funktion, daher will ich sie nicht zweimal schreiben (code duplication).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870465</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870465</guid><dc:creator><![CDATA[elfstone_von_oben]]></dc:creator><pubDate>Wed, 17 Mar 2010 16:29:50 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion überladen, jenachdem ob object const ist oder nicht. on Wed, 17 Mar 2010 16:39:34 GMT]]></title><description><![CDATA[<p>elfstone_von_oben schrieb:</p>
<blockquote>
<p>Ja, wäre beide male die selbe Funktion, daher will ich sie nicht zweimal schreiben (code duplication).</p>
</blockquote>
<p>bei überladung musst du sie aber auch 2 mal schreiben.</p>
<p>das problem ist halt, du willst ähnliche funktionen, aber nicht gleiche... dh du musst sie 2 mal implementieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870469</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870469</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Wed, 17 Mar 2010 16:39:34 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion überladen, jenachdem ob object const ist oder nicht. on Wed, 17 Mar 2010 16:42:41 GMT]]></title><description><![CDATA[<p>elfstone_von_oben schrieb:</p>
<blockquote>
<p>Ja, wäre beide male die selbe Funktion, daher will ich sie nicht zweimal schreiben (code duplication).</p>
</blockquote>
<p>Ich meinte eher, dass du mit Überladen auch zweimal eine Funktion schreiben musst (bzw. <em>dass</em> es sich gerade um eine Überladung handelt). <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>
<p>Wenn von einem einzeiligen Getter die Rede ist, also</p>
<pre><code class="language-cpp">return myM;
</code></pre>
<p>dann dupliziere den Code. Du erzeugst nur noch viel mehr Code, wenn du das zu vereinheitlichen versuchst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870472</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870472</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 17 Mar 2010 16:42:41 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion überladen, jenachdem ob object const ist oder nicht. on Wed, 17 Mar 2010 16:44:58 GMT]]></title><description><![CDATA[<blockquote>
<p>daher will ich sie nicht zweimal schreiben</p>
</blockquote>
<p>Musst Du aber. Wenn eine davon komplexer ist und/oder Du die Implementierung nicht &quot;verraten&quot; willst, könnte man es soch machen:</p>
<pre><code class="language-cpp">class Foo
{
public:
  const int * m getM() const; // &quot;aufwaendige&quot; Implementierung
                              // in cpp-Datei versteckt.

  int * m getM() {
    A const* me = this;
    return const_cast&lt;int*&gt;(me-&gt;getM());
  }

  [...]
}
</code></pre>
<p>Ist nicht ganz so schön, aber machbar/legal. Ich habe so etwas schonmal bei einer eigenen Datenstruktur gemacht. Eine bestimmte Funktion sollte ein Element suchen und einen Iterator darauf zurück geben. Für die Rückgabe auf einen einfachen Datenmember ist das aber Overkill.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870477</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870477</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Wed, 17 Mar 2010 16:44:58 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion überladen, jenachdem ob object const ist oder nicht. on Wed, 17 Mar 2010 17:13:21 GMT]]></title><description><![CDATA[<p>Oder:</p>
<pre><code class="language-cpp">class MyClass
{
public:
	int* GetMember()
	{
		return GetMemberImpl();
	}

	const int* GetMember() const
	{
		return GetMemberImpl();
	}

private:
	int* GetImpl() const
	{
		// Aufwand!
	}
};
</code></pre>
<p>Falls der <code>int*</code> aber auf einen Member der Klasse zeigt, ist <code>const_cast</code> wieder notwendig.</p>
<p>Man sollte übrigens vorsichtig sein mit <code>const_cast</code> : Das ist nämlich nur solange okay, wie das Originalobjekt (nicht Zeiger oder Referenzen darauf) nicht als konstant deklariert ist. Hier lässt sich das leicht erkennen, indem man sich überlegt, ob der nicht-konstante Getter seine Aufgaben ebensogut ohne <code>const_cast</code> erledigen könnte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870488</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870488</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 17 Mar 2010 17:13:21 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion überladen, jenachdem ob object const ist oder nicht. on Thu, 18 Mar 2010 09:21:08 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">int * m getM();
</code></pre>
<p>Was hat eigentlich das m dort zu suchen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1870733</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1870733</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Thu, 18 Mar 2010 09:21:08 GMT</pubDate></item></channel></rss>