<?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[Parameterübergabe als Referenz]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>wenn ich ne Methode mit einem Referenzparameter hab:</p>
<pre><code class="language-cpp">int method(Object &amp;o);
</code></pre>
<p>Wie kann ich diese Methode dann mit einem Object oder Object* (!=0) aufrufen?</p>
<p>Wenn vor dem Parameter ein const steht heißt es doch nur, dass der Wert in<br />
der Methode nicht verändert werden kann, oder?<br />
und was heißt ein const nach den Klammern?</p>
<p>Gruß,<br />
CSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/118546/parameterübergabe-als-referenz</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 11:22:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/118546.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 21 Aug 2005 19:03:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Parameterübergabe als Referenz on Sun, 21 Aug 2005 19:03:33 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>wenn ich ne Methode mit einem Referenzparameter hab:</p>
<pre><code class="language-cpp">int method(Object &amp;o);
</code></pre>
<p>Wie kann ich diese Methode dann mit einem Object oder Object* (!=0) aufrufen?</p>
<p>Wenn vor dem Parameter ein const steht heißt es doch nur, dass der Wert in<br />
der Methode nicht verändert werden kann, oder?<br />
und was heißt ein const nach den Klammern?</p>
<p>Gruß,<br />
CSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/855608</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/855608</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 21 Aug 2005 19:03:33 GMT</pubDate></item><item><title><![CDATA[Reply to Parameterübergabe als Referenz on Sun, 21 Aug 2005 19:12:54 GMT]]></title><description><![CDATA[<p>Das tolle an Referenzen ist, dass du den Aufruf nicht merkst:</p>
<pre><code class="language-cpp">void method (Class&amp; obj);

...

Class myObj;
method(myObj); // normalo
</code></pre>
<blockquote>
<p>Wenn vor dem Parameter ein const steht heißt es doch nur, dass der Wert in<br />
der Methode nicht verändert werden kann, oder?</p>
</blockquote>
<p>Jap, sieht man nur bei call-by-reference da ja call-by-value sowieso nichts in der Methode verändern kann. call-by-value und const-call-by-reference haben die gleichen Auswirkungen in der Methode -&gt; Objekt das ich nicht nach außen hin verändern kann. Mit dem Unterschied, dass ich für große Objekte (eigentlich alles was größer als 8byte ist auf nem 64-bit-rechner) nur die 8byte für den zeiger (jaja, referenzen sind intern auch zeiger) übergeben muss und mich eine vollständige kopie tonnen von bytes kosten könnte.</p>
<blockquote>
<p>und was heißt ein const nach den Klammern?</p>
</blockquote>
<p>Das legt fest, dass die Methode keine Member-Variablen der Klasse verändert. Damit kann sie auch für const-Objekee aufgerufen werden:</p>
<pre><code class="language-cpp">class Class
{
    int m_x;

    Class(int x) : m_x(x) {}

    void method1 () { m_x = 5; } // Nicht const, verändert Member
    void method2 () const { tu_was_anderes; } // const, verändert keine Member
    void method3 () const { m_x = 5; } // Compiler-Fehler
};

// hab ich jetzt ein const-obj, zB weil ich es per const-by-reference übergeben bekommen habe:
void meineFunktion (const Class&amp; obj)
{
    obj.method1(); // Nicht erlaubt, habe const-objekt und kann nur const-methoden aufrufen
    obj.method2(); // erlaubt, tut ja nix an Class und somit blebt obj nach außen hin konstant, erlaubt
}
</code></pre>
<p>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/855615</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/855615</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Sun, 21 Aug 2005 19:12:54 GMT</pubDate></item><item><title><![CDATA[Reply to Parameterübergabe als Referenz on Sun, 21 Aug 2005 19:16:48 GMT]]></title><description><![CDATA[<p>CSpille schrieb:</p>
<blockquote>
<p>Wie kann ich diese Methode dann mit einem Object oder Object* (!=0) aufrufen?</p>
</blockquote>
<pre><code class="language-cpp">Object a,b;
a.method(b);
</code></pre>
<p>Also ganz einfach den Variablennamen hinschreiben.<br />
Object* für bei einem Parameter (Object &amp;) nicht funktionieren.</p>
<p>CSpille schrieb:</p>
<blockquote>
<p>Wenn vor dem Parameter ein const steht heißt es doch nur, dass der Wert in<br />
der Methode nicht verändert werden kann, oder?<br />
und was heißt ein const nach den Klammern?</p>
</blockquote>
<p><a href="http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&amp;faq=constcor#Answ" rel="nofollow">http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&amp;faq=constcor#Answ</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/855618</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/855618</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 21 Aug 2005 19:16:48 GMT</pubDate></item><item><title><![CDATA[Reply to Parameterübergabe als Referenz on Sun, 21 Aug 2005 19:52:04 GMT]]></title><description><![CDATA[<p>Hallo nochmal...</p>
<p>Danke schonmal!<br />
Ich habe es auch so probiert ein Object an den Referenzparameter zu übergeben.</p>
<p>Das funktioniert nicht, aber ich weiß nicht wieso.</p>
<p>Der Konstruktor besitzt folgende Signatur:</p>
<pre><code class="language-cpp">SMutexLocker(SMutex &amp;mutex);
</code></pre>
<p>Die folgende Zeile funktioniert:</p>
<pre><code class="language-cpp">SMutexLocker(SMutex());
</code></pre>
<p>Allerdings macht er beim Compilieren dieses Codes:</p>
<pre><code class="language-cpp">SMutex mutex();
SMutexLocker(mutex);
</code></pre>
<p>folgende Fehler:</p>
<p>*/home/CSpille/projects/cspille/src/Test.cpp:27: error: no matching function for call to `SMutexLocker::SMutexLocker(SMutex (&amp;)())'<br />
*/home/CSpille/projects/cspille/src/smutexlocker.h:13: error: candidates are: SMutexLocker::SMutexLocker(const SMutexLocker&amp;)<br />
*/home/CSpille/projects/cspille/src/smutexlocker.h:15: error: SMutexLocker::SMutexLocker(SMutex&amp;)</p>
<p>Auch bei der Übergabe eines statischen SMutex macht er die gleiche Fehler-<br />
meldung.</p>
<p>Gruß,<br />
CSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/855641</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/855641</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 21 Aug 2005 19:52:04 GMT</pubDate></item><item><title><![CDATA[Reply to Parameterübergabe als Referenz on Sun, 21 Aug 2005 19:57:00 GMT]]></title><description><![CDATA[<blockquote>
<pre><code class="language-cpp">SMutex mutex();
</code></pre>
</blockquote>
<p>Das ist eine Funktionsdefinition keine Instanzierung</p>
]]></description><link>https://www.c-plusplus.net/forum/post/855644</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/855644</guid><dc:creator><![CDATA[FireFlow]]></dc:creator><pubDate>Sun, 21 Aug 2005 19:57:00 GMT</pubDate></item><item><title><![CDATA[Reply to Parameterübergabe als Referenz on Sun, 21 Aug 2005 20:01:26 GMT]]></title><description><![CDATA[<p>*argh*</p>
<p>Ich Depp...</p>
<p>thx</p>
]]></description><link>https://www.c-plusplus.net/forum/post/855648</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/855648</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 21 Aug 2005 20:01:26 GMT</pubDate></item></channel></rss>