<?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[Objekte als Parameter]]></title><description><![CDATA[<p>Hallo ich hab ein Problem beim kopieren von Objekte als Paramter.</p>
<p>Im Tutorial stand:</p>
<pre><code class="language-cpp">Werden Objekte an Funktionen oder Memberfunktionen übergeben, so sollte dies in der Regel über Referenzparameter erfolgen. Eine Übergabe per called-by-value sollte soweit wie möglich vermieden werden. Übergeben Sie ein Objekt per called-by-value, so erhält die Funktion, wie auch bei den einfachen Daten, nur eine Kopie des Objekts, d.h. alle Eigenschaften des zu übergebenden Objekts werden in ein temporäres Objekt umkopiert und dieses dann an die Funktion übergeben.. Dies kann je nach Objektgröße erheblich Zeit und Platz auf dem Stack benötigen. Bei einer Übergabe per Referenz entfällt dieser Kopiervorgang.

Innerhalb der aufgerufenen Funktion bzw. Memberfunktion haben Sie dann über den Parameternamen Zugriff auf alle public-Member des übergebenen Objekts. Ist die aufgerufene Funktion eine Memberfunktion die zur gleiche Klasse wie das übergebene Objekt gehört, so hat die Memberfunktion Zugriff auf alle Member, auch auf die private Member, des übergebenen Objekts (siehe nächsten Abschnitt).
class Window
{
   ...
};
// Funktionsdeklaration
void DoAny (Window&amp; obj);

// Objekt definieren
Window myWin;
int main()
{
   ...
   // Aufruf der Funktion
   DoAny(myWin);
   ...
}
// Funktionsdefinition
void DoAny (Window&amp; obj)
{
   ...
   obj.Size (640,480);    // Übergebenes
   obj.Move (0,0);        // Fenster verändern
}

Den Nachteil den eine Übergabe eines Objekts als Referenzparameter mit sich bringt ist, dass die Funktion oder Memberfunktion das übergebene Objekt eventuell unbeabsichtigt verändern kann. In vielen Fällen kann es aber durchaus sinnvoll sein, dass eine Funktion bzw. Memberfunktion das übergebene Objekt nicht verändern können soll. In diesem Fall übergeben Sie das Objekt als konstante Referenz , so wie nachfolgend an der Funktion DoAny(...) dargestellt. Ein Versuch das Objekt dann innerhalb der Funktion/Memberfunktion zu verändern, führt zu einem Fehler beim Übersetzen des Programms. Dies gilt auch, wenn die Funktion/Memberfunktion eine Memberfunktion des übergebenen Objekts aufruft, die nicht als const-Memberfunktion definiert ist. Der Aufruf einer nicht-const-Memberfunktion würde ja ansonsten wieder eine Veränderung des übergebenen Objekts zulassen (siehe hier).
class Window
{
   ...
 public:
   void NonConstMeth();
   void ConstMeth(...) const;
};

// Normale Funktion mit const-Referenzparameter
void DoAny (const Window&amp; obj)
{
   obj.NonConstMeth();   // Aufruf nicht-constMemberfunktion -&gt; FEHLER!
   obj.ConstMeth();      // Aufruf const Memberfunktion -&gt; OK!
}

// Objekt definieren
Window myWin;
// main() Funktion
int main()
{
   ...
   // Aufruf der Funktion
   DoAny(myWin);
   ...
}
</code></pre>
<p>[/cpp]</p>
<p>So wie es im Tutorial steht funktioniert es ja nicht -.-</p>
<p>Also hab ich es verändert:</p>
<pre><code class="language-cpp">#include &lt;windows&gt;
#include &lt;iostream&gt;
using namespace std;

class Window
{

public:
int Move (int move_1 , int move_2);
int Size (int size_1 , int size_2);

};

// Funktionsdeklaration
void DoAny (Window&amp; obj);

// Objekt definieren
Window myWin;

int main()
{

   // Aufruf der Funktion
   DoAny(myWin);

}

// Funktionsdefinition
void DoAny (Window&amp; obj)
{

   obj.Size (640,480);    // Übergebenes
   obj.Move (0,0);        // Fenster verändern
}
</code></pre>
<p>Aber das funktioniert auch nicht besser ...</p>
<p>[Linker Fehler] Unresolved external 'Window::Size(int, int)' referenced from E:\BORLAND\CBUILDER6\BIN\UNIT1.OBJ<br />
[Linker Fehler] Unresolved external 'Window::Move(int, int)' referenced from E:\BORLAND\CBUILDER6\BIN\UNIT1.OBJ</p>
<p>Was mache ich da falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/247528/objekte-als-parameter</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 12:46:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/247528.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 12 Aug 2009 09:23:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Objekte als Parameter on Wed, 12 Aug 2009 09:23:16 GMT]]></title><description><![CDATA[<p>Hallo ich hab ein Problem beim kopieren von Objekte als Paramter.</p>
<p>Im Tutorial stand:</p>
<pre><code class="language-cpp">Werden Objekte an Funktionen oder Memberfunktionen übergeben, so sollte dies in der Regel über Referenzparameter erfolgen. Eine Übergabe per called-by-value sollte soweit wie möglich vermieden werden. Übergeben Sie ein Objekt per called-by-value, so erhält die Funktion, wie auch bei den einfachen Daten, nur eine Kopie des Objekts, d.h. alle Eigenschaften des zu übergebenden Objekts werden in ein temporäres Objekt umkopiert und dieses dann an die Funktion übergeben.. Dies kann je nach Objektgröße erheblich Zeit und Platz auf dem Stack benötigen. Bei einer Übergabe per Referenz entfällt dieser Kopiervorgang.

Innerhalb der aufgerufenen Funktion bzw. Memberfunktion haben Sie dann über den Parameternamen Zugriff auf alle public-Member des übergebenen Objekts. Ist die aufgerufene Funktion eine Memberfunktion die zur gleiche Klasse wie das übergebene Objekt gehört, so hat die Memberfunktion Zugriff auf alle Member, auch auf die private Member, des übergebenen Objekts (siehe nächsten Abschnitt).
class Window
{
   ...
};
// Funktionsdeklaration
void DoAny (Window&amp; obj);

// Objekt definieren
Window myWin;
int main()
{
   ...
   // Aufruf der Funktion
   DoAny(myWin);
   ...
}
// Funktionsdefinition
void DoAny (Window&amp; obj)
{
   ...
   obj.Size (640,480);    // Übergebenes
   obj.Move (0,0);        // Fenster verändern
}

Den Nachteil den eine Übergabe eines Objekts als Referenzparameter mit sich bringt ist, dass die Funktion oder Memberfunktion das übergebene Objekt eventuell unbeabsichtigt verändern kann. In vielen Fällen kann es aber durchaus sinnvoll sein, dass eine Funktion bzw. Memberfunktion das übergebene Objekt nicht verändern können soll. In diesem Fall übergeben Sie das Objekt als konstante Referenz , so wie nachfolgend an der Funktion DoAny(...) dargestellt. Ein Versuch das Objekt dann innerhalb der Funktion/Memberfunktion zu verändern, führt zu einem Fehler beim Übersetzen des Programms. Dies gilt auch, wenn die Funktion/Memberfunktion eine Memberfunktion des übergebenen Objekts aufruft, die nicht als const-Memberfunktion definiert ist. Der Aufruf einer nicht-const-Memberfunktion würde ja ansonsten wieder eine Veränderung des übergebenen Objekts zulassen (siehe hier).
class Window
{
   ...
 public:
   void NonConstMeth();
   void ConstMeth(...) const;
};

// Normale Funktion mit const-Referenzparameter
void DoAny (const Window&amp; obj)
{
   obj.NonConstMeth();   // Aufruf nicht-constMemberfunktion -&gt; FEHLER!
   obj.ConstMeth();      // Aufruf const Memberfunktion -&gt; OK!
}

// Objekt definieren
Window myWin;
// main() Funktion
int main()
{
   ...
   // Aufruf der Funktion
   DoAny(myWin);
   ...
}
</code></pre>
<p>[/cpp]</p>
<p>So wie es im Tutorial steht funktioniert es ja nicht -.-</p>
<p>Also hab ich es verändert:</p>
<pre><code class="language-cpp">#include &lt;windows&gt;
#include &lt;iostream&gt;
using namespace std;

class Window
{

public:
int Move (int move_1 , int move_2);
int Size (int size_1 , int size_2);

};

// Funktionsdeklaration
void DoAny (Window&amp; obj);

// Objekt definieren
Window myWin;

int main()
{

   // Aufruf der Funktion
   DoAny(myWin);

}

// Funktionsdefinition
void DoAny (Window&amp; obj)
{

   obj.Size (640,480);    // Übergebenes
   obj.Move (0,0);        // Fenster verändern
}
</code></pre>
<p>Aber das funktioniert auch nicht besser ...</p>
<p>[Linker Fehler] Unresolved external 'Window::Size(int, int)' referenced from E:\BORLAND\CBUILDER6\BIN\UNIT1.OBJ<br />
[Linker Fehler] Unresolved external 'Window::Move(int, int)' referenced from E:\BORLAND\CBUILDER6\BIN\UNIT1.OBJ</p>
<p>Was mache ich da falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1759292</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1759292</guid><dc:creator><![CDATA[obj]]></dc:creator><pubDate>Wed, 12 Aug 2009 09:23:16 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte als Parameter on Wed, 12 Aug 2009 09:29:11 GMT]]></title><description><![CDATA[<p>hast du die beiden memberfunktionen auch definiert sprich geschrieben wie die was machen?</p>
<p>weil die erklärung oben und sowas ist alles richtig...<br />
auch die aufrufe, das einzige was fehlt sind die beiden definitionen zu move und size, bzw zu NonConstMth() und ConstMeth()</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1759303</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1759303</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Wed, 12 Aug 2009 09:29:11 GMT</pubDate></item><item><title><![CDATA[Reply to Objekte als Parameter on Wed, 12 Aug 2009 09:49:00 GMT]]></title><description><![CDATA[<p>Ty jetzt funktioniers</p>
<pre><code class="language-cpp">#include &lt;windows&gt;
#include &lt;iostream&gt; 
using namespace std; 

class Window 
{ 

public: 
int Move (int move_1 , int move_2);
int Size (int size_1 , int size_2);

};

int Window::Move(int move_z1 , int move_z2)
{
int erg;

erg = move_z1 + move_z2;

cout&lt;&lt;&quot;Move: &quot;&lt;&lt;erg&lt;&lt;endl;
}

int Window::Size (int size_1 , int size_2)
{
int erg;

erg = size_1 + size_2;

cout&lt;&lt;&quot;Size: &quot;&lt;&lt;erg&lt;&lt;endl;

}

// Funktionsdeklaration 
void DoAny (Window&amp; obj);

// Objekt definieren
Window myWin;

int main() 
{ 

   // Aufruf der Funktion
   DoAny(myWin);
    system(&quot;PAUSE&quot;);
} 

// Funktionsdefinition 
void DoAny (Window&amp; obj) 
{ 

   obj.Size (1,1);    // Übergebenes
   obj.Move (1,1);        // Fenster verändern
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1759322</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1759322</guid><dc:creator><![CDATA[obj]]></dc:creator><pubDate>Wed, 12 Aug 2009 09:49:00 GMT</pubDate></item></channel></rss>