<?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[Übergabe der konstanten Referenz als this gewertet]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich beschäftige mich momentan mit den slicing Problem. Um es mir noch einmal vor Augen zu halten habe ich es nach programmiert:</p>
<pre><code class="language-cpp">#ifndef base_h
#define base_h

#include &lt;iostream&gt;

class base {

public:
	virtual void print()
	{
		std::cout &lt;&lt; &quot;base&quot; &lt;&lt; std::endl;
	}
};

#endif
</code></pre>
<pre><code class="language-cpp">#ifndef inherit_h
#define inherit_h

#include &lt;iostream&gt;

#include &quot;base.h&quot;

class inherit
	: public base {

public:
	virtual void print ()
	{
		std::cout &lt;&lt; &quot;inherit&quot; &lt;&lt; std::endl;
	}
};

#endif
</code></pre>
<p>Und auch noch die main:</p>
<pre><code class="language-cpp">#include &quot;inherit.h&quot;
#include &quot;base.h&quot;

void call_by_value (base b)
{
	b.print();
}

void call_by_reference(base&amp; b)
{
	b.print();
}

int main (int argc, char** argv)
{
	inherit i;
	call_by_value(i);
	call_by_reference(i);
	return 1;
}
</code></pre>
<p>Sobald ich</p>
<pre><code class="language-cpp">void call_by_reference(base&amp; b)
</code></pre>
<p>durch</p>
<pre><code class="language-cpp">void call_by_reference(const base&amp; b)
</code></pre>
<p>ersetze bekomme ich folgenden Fehler:</p>
<blockquote>
<p>main.cpp: In function ‘void call_by_reference(const base&amp;)’:<br />
main.cpp:12: error: passing ‘const base’ as ‘this’ argument of ‘virtual void base::print()’ discards qualifiers</p>
</blockquote>
<p>Leider verstehe ich nicht den Grund für dieses Verhalten. Könnt ihr mir vielleicht sagen wieso dieser Fehler entsteht?</p>
<p>Viele Grüße,<br />
gallagher</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/294892/übergabe-der-konstanten-referenz-als-this-gewertet</link><generator>RSS for Node</generator><lastBuildDate>Sat, 15 Aug 2026 15:47:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/294892.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 03 Nov 2011 09:47:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Übergabe der konstanten Referenz als this gewertet on Thu, 03 Nov 2011 09:47:31 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich beschäftige mich momentan mit den slicing Problem. Um es mir noch einmal vor Augen zu halten habe ich es nach programmiert:</p>
<pre><code class="language-cpp">#ifndef base_h
#define base_h

#include &lt;iostream&gt;

class base {

public:
	virtual void print()
	{
		std::cout &lt;&lt; &quot;base&quot; &lt;&lt; std::endl;
	}
};

#endif
</code></pre>
<pre><code class="language-cpp">#ifndef inherit_h
#define inherit_h

#include &lt;iostream&gt;

#include &quot;base.h&quot;

class inherit
	: public base {

public:
	virtual void print ()
	{
		std::cout &lt;&lt; &quot;inherit&quot; &lt;&lt; std::endl;
	}
};

#endif
</code></pre>
<p>Und auch noch die main:</p>
<pre><code class="language-cpp">#include &quot;inherit.h&quot;
#include &quot;base.h&quot;

void call_by_value (base b)
{
	b.print();
}

void call_by_reference(base&amp; b)
{
	b.print();
}

int main (int argc, char** argv)
{
	inherit i;
	call_by_value(i);
	call_by_reference(i);
	return 1;
}
</code></pre>
<p>Sobald ich</p>
<pre><code class="language-cpp">void call_by_reference(base&amp; b)
</code></pre>
<p>durch</p>
<pre><code class="language-cpp">void call_by_reference(const base&amp; b)
</code></pre>
<p>ersetze bekomme ich folgenden Fehler:</p>
<blockquote>
<p>main.cpp: In function ‘void call_by_reference(const base&amp;)’:<br />
main.cpp:12: error: passing ‘const base’ as ‘this’ argument of ‘virtual void base::print()’ discards qualifiers</p>
</blockquote>
<p>Leider verstehe ich nicht den Grund für dieses Verhalten. Könnt ihr mir vielleicht sagen wieso dieser Fehler entsteht?</p>
<p>Viele Grüße,<br />
gallagher</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2139712</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2139712</guid><dc:creator><![CDATA[gallagher]]></dc:creator><pubDate>Thu, 03 Nov 2011 09:47:31 GMT</pubDate></item><item><title><![CDATA[Reply to Übergabe der konstanten Referenz als this gewertet on Thu, 03 Nov 2011 09:52:04 GMT]]></title><description><![CDATA[<p>Du rufst die nicht-const Memberfunktion print auf einem konstanten Objekt auf, das geht halt nicht (das ist ja gerade der Sinn von const, dass sowas unterbunden wird.) Da dein print aber das Objekt nicht verändert, könntest du es genausogut const deklarieren:</p>
<pre><code class="language-cpp">virtual void print() const
    {
        std::cout &lt;&lt; &quot;base&quot; &lt;&lt; std::endl;
    }
</code></pre>
<p>(auch in allen abgeleiteten Klassen)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2139714</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2139714</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Thu, 03 Nov 2011 09:52:04 GMT</pubDate></item><item><title><![CDATA[Reply to Übergabe der konstanten Referenz als this gewertet on Thu, 03 Nov 2011 10:08:58 GMT]]></title><description><![CDATA[<p>Moin bashar,</p>
<p>das macht sinn. Ohne eine konstante Member-Funktion hätte die Funktion das Recht das Objekt zu verändern, aber das Objekt darf laut Signatur nicht verändert werden. Das ist inkonsistent.</p>
<p>Vielen Dank,<br />
gallagher</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2139718</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2139718</guid><dc:creator><![CDATA[gallagher]]></dc:creator><pubDate>Thu, 03 Nov 2011 10:08:58 GMT</pubDate></item><item><title><![CDATA[Reply to Übergabe der konstanten Referenz als this gewertet on Thu, 03 Nov 2011 11:57:04 GMT]]></title><description><![CDATA[<p>also liegt das hier daran dass eine nichtkonstante methode auf ein konstantes objekt aufgerufen wird?</p>
<p>wenn ich das richtig verstanden hab...</p>
<p>aber da shat ja nix mit slicing zu tun sondern mit der const correctness</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2139772</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2139772</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Thu, 03 Nov 2011 11:57:04 GMT</pubDate></item><item><title><![CDATA[Reply to Übergabe der konstanten Referenz als this gewertet on Thu, 03 Nov 2011 21:35:05 GMT]]></title><description><![CDATA[<p>Der Fehler hatte nichts mit dem slicing Problem zu tun, da hast du schon recht. Das Programm an sich beschreibt aber das slicing Problem. Einfach einmal compilieren <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>Viele Grüße,<br />
gallagher</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2140059</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2140059</guid><dc:creator><![CDATA[gallagher]]></dc:creator><pubDate>Thu, 03 Nov 2011 21:35:05 GMT</pubDate></item></channel></rss>