<?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[Durch Funktion Inhalt eines Objektes kopieren]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich hab mal eine allgemeine Frage.</p>
<p>Wir haben als Aufgabe von unserem Prof eine Zeigerablage mit Klassen und Objekten zu realisieren.<br />
Ist auch kein Thema. Allerdings gibt es eine Nebenaufgabe, in der verlangt er zwei Methoden zum auffinden des minimums und maximums der Ablage. Dafür soll eine Funktion geschrieben werden, mit der wir den Inhalt des Objekts in ein 2tes Objekt zur zwischenablage kopieren sollen. Wir dürfen dafür (also für das kopieren) keine Methode verwenden. Und damit hab ich ein Problem. Ich versteh auch den Sinn nicht. Mit ner Methode wäre es doch super easy.</p>
<p>Meine Frage: Geht das überhaupt?<br />
Der Punkt ist, dass ich auf die Inhalte der Klasse ja nicht von außen zugreifen kann, weil sie pivate sind. Wie soll denn das gehen?</p>
<p>Danke für eure Antworten</p>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/330367/durch-funktion-inhalt-eines-objektes-kopieren</link><generator>RSS for Node</generator><lastBuildDate>Fri, 03 Jul 2026 11:35:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/330367.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 07 Jan 2015 10:04:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Durch Funktion Inhalt eines Objektes kopieren on Wed, 07 Jan 2015 10:04:16 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Ich hab mal eine allgemeine Frage.</p>
<p>Wir haben als Aufgabe von unserem Prof eine Zeigerablage mit Klassen und Objekten zu realisieren.<br />
Ist auch kein Thema. Allerdings gibt es eine Nebenaufgabe, in der verlangt er zwei Methoden zum auffinden des minimums und maximums der Ablage. Dafür soll eine Funktion geschrieben werden, mit der wir den Inhalt des Objekts in ein 2tes Objekt zur zwischenablage kopieren sollen. Wir dürfen dafür (also für das kopieren) keine Methode verwenden. Und damit hab ich ein Problem. Ich versteh auch den Sinn nicht. Mit ner Methode wäre es doch super easy.</p>
<p>Meine Frage: Geht das überhaupt?<br />
Der Punkt ist, dass ich auf die Inhalte der Klasse ja nicht von außen zugreifen kann, weil sie pivate sind. Wie soll denn das gehen?</p>
<p>Danke für eure Antworten</p>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2436311</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2436311</guid><dc:creator><![CDATA[Cabooze]]></dc:creator><pubDate>Wed, 07 Jan 2015 10:04:16 GMT</pubDate></item><item><title><![CDATA[Reply to Durch Funktion Inhalt eines Objektes kopieren on Wed, 07 Jan 2015 10:17:55 GMT]]></title><description><![CDATA[<p>(Pseudo-)Code?<br />
Ich kann mir da grad nix drunter vorstellen oO</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2436312</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2436312</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Wed, 07 Jan 2015 10:17:55 GMT</pubDate></item><item><title><![CDATA[Reply to Durch Funktion Inhalt eines Objektes kopieren on Wed, 07 Jan 2015 10:31:14 GMT]]></title><description><![CDATA[<p>Ich kann dir auch meinen bisherigen richtigen Code geben:</p>
<p>Das hier ist die Klasse:</p>
<pre><code>class knoten{

private:

    int i;
    int info;
    class knoten*next;

public:

    void initalize(){
        class knoten*p=new knoten;

        cnt++;
        p-&gt;i=cnt;
        p-&gt;info = rand()%100;
        p-&gt;next = oben;
        oben=p;

    }

    void drauflegen(){
        class knoten*p=new knoten;
        cnt++;
        p-&gt;i=cnt;
        p-&gt;info = rand()%100;
        p-&gt;next = oben;
        oben=p;
        cout &lt;&lt; &quot;Wert draufgelegt!&quot; &lt;&lt; endl;
    }

    void top(){
        cout &lt;&lt; &quot;Oberer Knoten (Nr. &quot; &lt;&lt; oben-&gt;i &lt;&lt; &quot;): &quot;;
        cout &lt;&lt; oben-&gt;info &lt;&lt; endl;
    }

    void max() {

    }

    void min() {
    }
};
</code></pre>
<p>Und hier die Main:</p>
<pre><code>int main() {

    knoten ablage1, hilfsablage;
    int eingabe=1;
    int max, knotennummer;

    ablage1.initalize();

    cout &lt;&lt; &quot;-----------Menü-----------&quot; &lt;&lt;endl;
    cout &lt;&lt; endl;
    cout &lt;&lt; &quot;1        Objekt drauflegen&quot; &lt;&lt;endl;
    cout &lt;&lt; &quot;2     oberen Wert anzeigen&quot; &lt;&lt;endl;
    cout &lt;&lt; &quot;3           Maximum suchen&quot; &lt;&lt;endl;
    cout &lt;&lt; &quot;4           Minimum suchen&quot; &lt;&lt;endl;
    cout &lt;&lt; &quot;5   Anzahl Knoten anzeigen&quot; &lt;&lt;endl;
    cout &lt;&lt; &quot;0                  Beenden&quot; &lt;&lt;endl;

    while(eingabe!=0){
        cout &lt;&lt; &quot;Ihre eingabe: &quot;;
        cin &gt;&gt; eingabe;
        cout &lt;&lt; endl;
        switch (eingabe){

            case 1: 
                ablage1.drauflegen();
                break;

            case 2:
                ablage1.top();
                break;

            case 3: 
                hilfsablage=ablage1;
                hilfsablage.max();
                break;

            case 4: 
                hilfsablage=ablage1;
                hilfsablage.min();
                break;

            case 5:
                cout &lt;&lt; &quot;Anzahl Daten: &quot; &lt;&lt; cnt &lt;&lt;endl;
                break;

            case 0: 
                break;
        }
    }

    return 0;
}
</code></pre>
<p>Aber meine Frage ist ja eher allgemein, wie man ein Objekt mit einer Funktion kopieren soll. Ich kann ja nicht auf die Internen variablen des Objekts zugreifen weil sie privat sind. Das geht doch nur mit einer Methode oder nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2436314</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2436314</guid><dc:creator><![CDATA[Cabooze]]></dc:creator><pubDate>Wed, 07 Jan 2015 10:31:14 GMT</pubDate></item><item><title><![CDATA[Reply to Durch Funktion Inhalt eines Objektes kopieren on Wed, 07 Jan 2015 10:33:34 GMT]]></title><description><![CDATA[<p>Sofern Du auch keinen Kopierkonstruktor oder einen überladenen Zuweisungsoperator benutzen darfst, könntest Du eine Funktion als friend deklarieren. Die darf dann auch auf private - Elemente zugreifen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2436315</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2436315</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Wed, 07 Jan 2015 10:33:34 GMT</pubDate></item><item><title><![CDATA[Reply to Durch Funktion Inhalt eines Objektes kopieren on Wed, 07 Jan 2015 10:57:48 GMT]]></title><description><![CDATA[<p>Ohne die genauen Anforderungen der Klasse <code>Ablage</code> zu kennen könnte man auch Zugriff auf jedes Element erlauben und eine Methode anbieten, die die Anzahl der Elemente zurückliefert. <code>min</code> und <code>max</code> iterieren dann über die einzelnen Elemente und liefern das kleinste bzw. größte Element zurück.<br />
Die Lösung mit Chromleisten wäre dann die Implementation von Iteratoren, damit könntest du Algorithmen und Daten vollständig voneinander trennen. Ist für einen Uni-Programmierkurs aber wohl viel zu viel verlangt.</p>
<p>PS:<br />
Das Schlüsselwort <code>class</code> bei der Variablendeklaration/-definition brauchst du nicht.</p>
<pre><code>knoten* p = new knoten();
</code></pre>
<p>Die Aufgabe scheint wohl zu sein, eine einfach verkettete Liste oder Stack zu implementieren. Du benutzt dabei nur die Klasse Knoten, die abhängig von ihrer Verwendung mal die Listen oder einen Knoten der Liste repräsentiert. Die korrekte Beziehung von Knoten und Liste ist nicht &quot;List-ist-Knoten&quot;, sondern &quot;Liste-ist-implementiert-durch-Knoten&quot;. In letzterem Fall ist Komposition das richtige Modell (oder nonpublic Inheritance). Die Liste sollte also in etwa so aussehen:</p>
<pre><code>class List
{
   knoten* head;

   void drauflegen( int i )
   {
      knoten p = new knoten();
      p-&gt;i = i;

      p-&gt;next = head;
      head = p;
   }

   // usw...
};
</code></pre>
<p>Bitte beachte, dass du die Regel der Drei (Fünf) beachten musst, da beim Kopieren der Liste nicht einfach den Zeiger des Listenkopfes kopieren darfst, sondern die Liste komplett kopieren musst.</p>
<p>Und dein bisher &quot;richtiger&quot; Code ist, so leid es mir tut, fürchterlich. Er lädt geradezu ein, Objekte falsch zu gebrauchen und entweder Speicherlecks oder undefiniertes Verhalten durch doppeltes <code>delete</code> zu erzeugen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2436316</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2436316</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Wed, 07 Jan 2015 10:57:48 GMT</pubDate></item><item><title><![CDATA[Reply to Durch Funktion Inhalt eines Objektes kopieren on Wed, 07 Jan 2015 10:44:53 GMT]]></title><description><![CDATA[<p>Von Iteratoren oder friend funktionen hab ich allerdings noch nie was gehört^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2436317</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2436317</guid><dc:creator><![CDATA[Cabooze]]></dc:creator><pubDate>Wed, 07 Jan 2015 10:44:53 GMT</pubDate></item><item><title><![CDATA[Reply to Durch Funktion Inhalt eines Objektes kopieren on Wed, 07 Jan 2015 10:59:12 GMT]]></title><description><![CDATA[<p>Cabooze schrieb:</p>
<blockquote>
<p>Von Iteratoren oder friend funktionen hab ich allerdings noch nie was gehört^^</p>
</blockquote>
<p>Macht nix, gibt ja google.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2436321</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2436321</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Wed, 07 Jan 2015 10:59:12 GMT</pubDate></item><item><title><![CDATA[Reply to Durch Funktion Inhalt eines Objektes kopieren on Wed, 07 Jan 2015 11:46:17 GMT]]></title><description><![CDATA[<p>DocShoe schrieb:</p>
<blockquote>
<p>Ohne die genauen Anforderungen der Klasse <code>Ablage</code> zu kennen könnte man auch Zugriff auf jedes Element erlauben und eine Methode anbieten, die die Anzahl der Elemente zurückliefert. <code>min</code> und <code>max</code> iterieren dann über die einzelnen Elemente und liefern das kleinste bzw. größte Element zurück.<br />
Die Lösung mit Chromleisten wäre dann die Implementation von Iteratoren, damit könntest du Algorithmen und Daten vollständig voneinander trennen. Ist für einen Uni-Programmierkurs aber wohl viel zu viel verlangt.</p>
<p>PS:<br />
Das Schlüsselwort <code>class</code> bei der Variablendeklaration/-definition brauchst du nicht.</p>
<pre><code>knoten* p = new knoten();
</code></pre>
<p>Die Aufgabe scheint wohl zu sein, eine einfach verkettete Liste oder Stack zu implementieren. Du benutzt dabei nur die Klasse Knoten, die abhängig von ihrer Verwendung mal die Listen oder einen Knoten der Liste repräsentiert. Die korrekte Beziehung von Knoten und Liste ist nicht &quot;List-ist-Knoten&quot;, sondern &quot;Liste-ist-implementiert-durch-Knoten&quot;. In letzterem Fall ist Komposition das richtige Modell (oder nonpublic Inheritance). Die Liste sollte also in etwa so aussehen:</p>
<pre><code>class List
{
   knoten* head;

   void drauflegen( int i )
   {
      knoten p = new knoten();
      p-&gt;i = i;
      
      p-&gt;next = head;
      head = p;
   }

   // usw...
};
</code></pre>
<p>Bitte beachte, dass du die Regel der Drei (Fünf) beachten musst, da beim Kopieren der Liste nicht einfach den Zeiger des Listenkopfes kopieren darfst, sondern die Liste komplett kopieren musst.</p>
<p>Und dein bisher &quot;richtiger&quot; Code ist, so leid es mir tut, fürchterlich. Er lädt geradezu ein, Objekte falsch zu gebrauchen und entweder Speicherlecks oder undefiniertes Verhalten durch doppeltes <code>delete</code> zu erzeugen.</p>
</blockquote>
<p>Wir haben Klassen und Objekte erst angefangen. Daher versteh ich auch noch nicht viel davon.<br />
Ja eben dieses Kopieren ist ja mein Problem.<br />
Also du meinst ich könnte die Attribute der Klasse auch einfach public machen oder wie meinst du das jetzt?</p>
<p>DocShoe schrieb:</p>
<blockquote>
<p>Cabooze schrieb:</p>
<blockquote>
<p>Von Iteratoren oder friend funktionen hab ich allerdings noch nie was gehört^^</p>
</blockquote>
<p>Macht nix, gibt ja google.</p>
</blockquote>
<p>Der Punkt ist dass wir nur Dinge benutzen dürfen die wir behandelt haben. Sonst krieg ich die Ohren lang gemacht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2436329</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2436329</guid><dc:creator><![CDATA[Cabooze]]></dc:creator><pubDate>Wed, 07 Jan 2015 11:46:17 GMT</pubDate></item><item><title><![CDATA[Reply to Durch Funktion Inhalt eines Objektes kopieren on Wed, 07 Jan 2015 12:10:36 GMT]]></title><description><![CDATA[<p>Nein, ich meine, dass du eigentlich zwei Klassen brauchst. Eine, die dem Benutzer gibst, damit er eine Menge von Objekten verwalten kann ( <code>List</code> ). Eine zweite, die die Klasse <code>List</code> intern benutzt, um die Elemente zu verwalten.</p>
<p>Edit:<br />
Der Google-Hinweis war mit einem Augenzwinkern, ich habe ja schon geschrieben, dass Iteratoren nix für einen Uni Programmierkurs sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2436332</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2436332</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Wed, 07 Jan 2015 12:10:36 GMT</pubDate></item><item><title><![CDATA[Reply to Durch Funktion Inhalt eines Objektes kopieren on Wed, 07 Jan 2015 15:34:53 GMT]]></title><description><![CDATA[<p>Okay ist halt die Frage ob wir das dürfen. In der Aufgabenstellung steht nur wir sollen dieses kopieren durch eine Funktion realisieren. Und da ist irgendwie wieder der Knackpunkt. Selbst wenn ich eine 2te Klasse erstelle. Ich kann einfach über eine Funktion nicht auf die Attribute zugreifen.</p>
<p>Zu deiner List funktion.<br />
Du sagtest ja, mein Code sieht fürchterlich aus^^<br />
Aber außer dass der Zähler fehlt sehe ich jetzt keinen Unterschied zwischen deiner List und meinem Knoten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2436376</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2436376</guid><dc:creator><![CDATA[Cabooze]]></dc:creator><pubDate>Wed, 07 Jan 2015 15:34:53 GMT</pubDate></item><item><title><![CDATA[Reply to Durch Funktion Inhalt eines Objektes kopieren on Wed, 07 Jan 2015 16:14:43 GMT]]></title><description><![CDATA[<p>Im Prinzip hast du recht, meine <code>List</code> Klasse macht (im Moment) nicht wesentlich mehr als deine <code>knoten</code> Klasse. Aber gehen wir mal weiter, du forderst in deinem Programm mit <code>new</code> Speicher an, wo wird der denn wieder freigegeben? Da brauchst du eine Entscheidung, ob der Knoten auf dem Stack liegt (in deinem Quelltext main, Zeile 3) oder auf dem Heap (Klassen knoten, Zeile 23). Das kann deine Knoten Klasse allein schon nicht mehr handhaben, weil da ein Entscheidungskriterium gebraucht wird. Für diesen Fall brauchst du zwei unterschiedliche Verhalten, das kann ein Flag in der Klasse <code>knoten</code> sein (meh!), oder eine neue Klasse <code>List</code> . <code>List</code> benutzt <code>knoten</code> nur intern und stellt sicher, dass jeder Knoten, der mit <code>new</code> erzeugt wurde auch mit <code>delete</code> wieder freigegeben wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2436389</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2436389</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Wed, 07 Jan 2015 16:14:43 GMT</pubDate></item><item><title><![CDATA[Reply to Durch Funktion Inhalt eines Objektes kopieren on Wed, 07 Jan 2015 17:16:56 GMT]]></title><description><![CDATA[<p>Ok aber mein Hauptproblem ist jetzt immernoch nicht weg...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2436395</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2436395</guid><dc:creator><![CDATA[Cabooze]]></dc:creator><pubDate>Wed, 07 Jan 2015 17:16:56 GMT</pubDate></item><item><title><![CDATA[Reply to Durch Funktion Inhalt eines Objektes kopieren on Wed, 07 Jan 2015 17:33:09 GMT]]></title><description><![CDATA[<p>Cabooze schrieb:</p>
<blockquote>
<p>Ok aber mein Hauptproblem ist jetzt immernoch nicht weg...</p>
</blockquote>
<p>Dein Hauptproblem ist, dass Du an Deiner <code>knoten</code> Klasse festhältst, obwohl die völlig unsinnig ist.<br />
Klar ist das nicht weg, solange Du nicht daran arbeitest!?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2436396</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2436396</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Wed, 07 Jan 2015 17:33:09 GMT</pubDate></item></channel></rss>