<?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[Clone Methode]]></title><description><![CDATA[<p>So mal wieder eine Frage, und zwar, hier ist folgender Code:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class Mammal
{
    public:
    Mammal(int Age);
    Mammal(const Mammal &amp;rhs);
    virtual ~Mammal();
    void SetAge(int a) {itsAge=a;}
    int GetAge() {return itsAge;}
    virtual Mammal * Clone() const {return new Mammal(*this);}
    virtual void Speak() const {cout &lt;&lt; &quot;Mammal spricht\n&quot;;}

    protected:
    int itsAge;
};

Mammal::Mammal(int Age)
:itsAge(Age)
{

}

Mammal::Mammal(const Mammal &amp;rhs)
{

}

Mammal::~Mammal()
{

}

class Dog : public Mammal
{
    public:
    Dog(int Age);
    Dog(const Dog &amp;rhs);
    ~Dog();
    Mammal * Clone() const {return new Dog(*this);}
    void Speak() const {cout &lt;&lt; &quot;WAU WAU\n&quot;;}
};

Dog::Dog(int Age)
:Mammal(Age)
{

}

Dog::Dog(const Dog &amp;rhs)
:Mammal(rhs)
{

}

Dog::~Dog()
{

}

int main()
{
    int choice;
    Mammal *Array[2];
    Mammal *ptr;
    for (int i=0;i&lt;2;i++)
    {
        cout &lt;&lt; &quot;Dog(0) Mammal(1)\n&quot;;
        cin &gt;&gt; choice;
        switch(choice)
        {
            case 0:
            ptr=new Dog(10);
            break;
            case 1:
            ptr=new Mammal(20);
            break;
        }
        Array[i]=ptr;
    }
    Mammal *OtherArray[2];
    cout &lt;&lt; &quot;\nTEST\n\n&quot;;
    for (int i=0;i&lt;2;i++)
    {
        cout &lt;&lt; Array[i]-&gt;GetAge() &lt;&lt; endl;
        Array[i]-&gt;Speak();
        OtherArray[i]=Array[i]-&gt;Clone();
    }
    cout &lt;&lt; &quot;###########################################\n&quot;;
    for (int i=0;i&lt;2;i++)
    {
        cout &lt;&lt; OtherArray[i]-&gt;GetAge() &lt;&lt; endl;
        OtherArray[i]-&gt;Speak();
    }

    return 0;
}
</code></pre>
<p>AUSGABE (auf der Konsole):</p>
<blockquote>
<p>Dog(0) Mammal(1)<br />
0<br />
Dog(0) Mammal(1)<br />
1</p>
<p>TEST</p>
<p>10<br />
WAU WAU<br />
20<br />
Mammal spricht<br />
###########################################<br />
4064376 /* &lt;- GetAge() aus Zeile 93, verstehe ich noch! Die Zahl ist so komische weil ihr noch nichts mit SetAge zugewiesen wurde. Weil in Zeile 88 wird ja dem Mammal Zeiger Feld Other Array mit der &quot;Clone Methode&quot; nur der Dog teil (mit *this Zeiger) zugewiesen, und der Mammal Konstruktor in dem eigentlich itsAge zugewiesen wird befindet sich ja nicht in der Dog Klasse. */<br />
WAU WAU<br />
4064360 /*&lt;-- Aber warum kommt hier auch so eine komische Zahl? (zweiter durchlauf der for Schleife in Zeile 93) Meiner Meinung nach müsste hier die Zahl &quot;20&quot; stehen, die in Zeile 77 zugewiesen wird ( ptr=new Mammal(20); ).<br />
Weil in Zeile 88 bei der Clone Methode wird ja dann auch der Mammal Teil übergeben, undzum Mammal Teil würde ja auch &quot;itsAge&quot; dazu gehören. Und &quot;itsAge&quot; ist ja schon zugewiesen worden, und würde somit doch einfach ganz normal in Zeile 88 mit der Clone Methode mit übergeben. */<br />
Mammal spricht</p>
</blockquote>
<p>Nochmal die Ausgabe ohne meine Kommentare, nicht das die verwirrend sind:</p>
<blockquote>
<p>Dog(0) Mammal(1)<br />
0<br />
Dog(0) Mammal(1)<br />
1</p>
<p>TEST</p>
<p>10<br />
WAU WAU<br />
20<br />
Mammal spricht<br />
###########################################<br />
4064376<br />
WAU WAU<br />
4064360<br />
Mammal spricht</p>
</blockquote>
<p>So ich hoffe es versteht jemand was ich mein. Is vll. nicht so ganz verständlich, aber vll. kann sich ja jemand reindenken, oder ihr kompiliert den Code vll. kurz und verstehe es dann? Na ja aber ich verstehe das nicht warum die Zahl beim Mammal Teil nicht übermittelt wird, sondern bloß &quot;4064360&quot;, weil die ist doch schon zugewiesen. Dankeschön schon mal im Voraus.</p>
<p>PS: Das ist nur eine Übung aus meinem Buch, nicht das wieder jemand sagt, was isn das fürn konfuser Code, so schreibt man doch gar kein Programm das ist doch sinnlos....! Also es ist nur eine Übung <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/175506/clone-methode</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 03:13:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/175506.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 11 Mar 2007 13:45:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Clone Methode on Sun, 11 Mar 2007 13:46:29 GMT]]></title><description><![CDATA[<p>So mal wieder eine Frage, und zwar, hier ist folgender Code:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class Mammal
{
    public:
    Mammal(int Age);
    Mammal(const Mammal &amp;rhs);
    virtual ~Mammal();
    void SetAge(int a) {itsAge=a;}
    int GetAge() {return itsAge;}
    virtual Mammal * Clone() const {return new Mammal(*this);}
    virtual void Speak() const {cout &lt;&lt; &quot;Mammal spricht\n&quot;;}

    protected:
    int itsAge;
};

Mammal::Mammal(int Age)
:itsAge(Age)
{

}

Mammal::Mammal(const Mammal &amp;rhs)
{

}

Mammal::~Mammal()
{

}

class Dog : public Mammal
{
    public:
    Dog(int Age);
    Dog(const Dog &amp;rhs);
    ~Dog();
    Mammal * Clone() const {return new Dog(*this);}
    void Speak() const {cout &lt;&lt; &quot;WAU WAU\n&quot;;}
};

Dog::Dog(int Age)
:Mammal(Age)
{

}

Dog::Dog(const Dog &amp;rhs)
:Mammal(rhs)
{

}

Dog::~Dog()
{

}

int main()
{
    int choice;
    Mammal *Array[2];
    Mammal *ptr;
    for (int i=0;i&lt;2;i++)
    {
        cout &lt;&lt; &quot;Dog(0) Mammal(1)\n&quot;;
        cin &gt;&gt; choice;
        switch(choice)
        {
            case 0:
            ptr=new Dog(10);
            break;
            case 1:
            ptr=new Mammal(20);
            break;
        }
        Array[i]=ptr;
    }
    Mammal *OtherArray[2];
    cout &lt;&lt; &quot;\nTEST\n\n&quot;;
    for (int i=0;i&lt;2;i++)
    {
        cout &lt;&lt; Array[i]-&gt;GetAge() &lt;&lt; endl;
        Array[i]-&gt;Speak();
        OtherArray[i]=Array[i]-&gt;Clone();
    }
    cout &lt;&lt; &quot;###########################################\n&quot;;
    for (int i=0;i&lt;2;i++)
    {
        cout &lt;&lt; OtherArray[i]-&gt;GetAge() &lt;&lt; endl;
        OtherArray[i]-&gt;Speak();
    }

    return 0;
}
</code></pre>
<p>AUSGABE (auf der Konsole):</p>
<blockquote>
<p>Dog(0) Mammal(1)<br />
0<br />
Dog(0) Mammal(1)<br />
1</p>
<p>TEST</p>
<p>10<br />
WAU WAU<br />
20<br />
Mammal spricht<br />
###########################################<br />
4064376 /* &lt;- GetAge() aus Zeile 93, verstehe ich noch! Die Zahl ist so komische weil ihr noch nichts mit SetAge zugewiesen wurde. Weil in Zeile 88 wird ja dem Mammal Zeiger Feld Other Array mit der &quot;Clone Methode&quot; nur der Dog teil (mit *this Zeiger) zugewiesen, und der Mammal Konstruktor in dem eigentlich itsAge zugewiesen wird befindet sich ja nicht in der Dog Klasse. */<br />
WAU WAU<br />
4064360 /*&lt;-- Aber warum kommt hier auch so eine komische Zahl? (zweiter durchlauf der for Schleife in Zeile 93) Meiner Meinung nach müsste hier die Zahl &quot;20&quot; stehen, die in Zeile 77 zugewiesen wird ( ptr=new Mammal(20); ).<br />
Weil in Zeile 88 bei der Clone Methode wird ja dann auch der Mammal Teil übergeben, undzum Mammal Teil würde ja auch &quot;itsAge&quot; dazu gehören. Und &quot;itsAge&quot; ist ja schon zugewiesen worden, und würde somit doch einfach ganz normal in Zeile 88 mit der Clone Methode mit übergeben. */<br />
Mammal spricht</p>
</blockquote>
<p>Nochmal die Ausgabe ohne meine Kommentare, nicht das die verwirrend sind:</p>
<blockquote>
<p>Dog(0) Mammal(1)<br />
0<br />
Dog(0) Mammal(1)<br />
1</p>
<p>TEST</p>
<p>10<br />
WAU WAU<br />
20<br />
Mammal spricht<br />
###########################################<br />
4064376<br />
WAU WAU<br />
4064360<br />
Mammal spricht</p>
</blockquote>
<p>So ich hoffe es versteht jemand was ich mein. Is vll. nicht so ganz verständlich, aber vll. kann sich ja jemand reindenken, oder ihr kompiliert den Code vll. kurz und verstehe es dann? Na ja aber ich verstehe das nicht warum die Zahl beim Mammal Teil nicht übermittelt wird, sondern bloß &quot;4064360&quot;, weil die ist doch schon zugewiesen. Dankeschön schon mal im Voraus.</p>
<p>PS: Das ist nur eine Übung aus meinem Buch, nicht das wieder jemand sagt, was isn das fürn konfuser Code, so schreibt man doch gar kein Programm das ist doch sinnlos....! Also es ist nur eine Übung <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1243358</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1243358</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Sun, 11 Mar 2007 13:46:29 GMT</pubDate></item><item><title><![CDATA[Reply to Clone Methode on Sun, 11 Mar 2007 13:50:19 GMT]]></title><description><![CDATA[<p>Der Copykonstruktor von Mammal initialisiert itsAge nicht, weder aus dem Parameter noch sonst irgendwie.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1243365</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1243365</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Sun, 11 Mar 2007 13:50:19 GMT</pubDate></item><item><title><![CDATA[Reply to Clone Methode on Sun, 11 Mar 2007 14:17:54 GMT]]></title><description><![CDATA[<p>Ja wie? Also wenn ich jetzt ein Mammal Objekt &quot;A&quot; hätte, und in diesem wäre itsAge schon initialisiert und hätt den Wert &quot;33&quot; und ich würde dann die Clone Methode aufrufen [ virtual Mammal * Clone() const {return new Mammal(*this);} ], also:</p>
<pre><code class="language-cpp">......
Mammal *A=new Mammal(33);
Mammal *B=A-&gt;Clone();
......
</code></pre>
<p>dann wäre der Wert von der Elementvariable &quot;itsAge&quot; in B nicht &quot;33&quot; (sowie ihn A) sondern wieder irgend eine komische Zahl, da &quot;itsAge&quot; in B noch nicht initialisiert wurde?<br />
Dankeschön schon mal im Voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1243395</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1243395</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Sun, 11 Mar 2007 14:17:54 GMT</pubDate></item><item><title><![CDATA[Reply to Clone Methode on Sun, 11 Mar 2007 14:36:43 GMT]]></title><description><![CDATA[<p><a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-171917-and-highlight-is-.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-171917-and-highlight-is-.html</a> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
Edit: Siehe last Post</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1243398</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1243398</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 11 Mar 2007 14:36:43 GMT</pubDate></item><item><title><![CDATA[Reply to Clone Methode on Sun, 11 Mar 2007 14:28:29 GMT]]></title><description><![CDATA[<p>Stromberg schrieb:</p>
<blockquote>
<p>...dann wäre der Wert von der Elementvariable &quot;itsAge&quot; in B nicht &quot;33&quot; (sowie ihn A) sondern wieder irgend eine komische Zahl, da &quot;itsAge&quot; in B noch nicht initialisiert wurde?</p>
</blockquote>
<p>Genau das.<br />
Wo soll der Wert in B auch herkommen? Der einzige Mammal-Konstruktor, der itsAge initialisiert, ist der int-Konstruktor. Ein vom Compiler automatisch generierter Copykonstruktor würde itsAge mit rhs.itsAge initialisieren, aber dein Copykonstruktor tut einfach gar nichts.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1243401</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1243401</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Sun, 11 Mar 2007 14:28:29 GMT</pubDate></item><item><title><![CDATA[Reply to Clone Methode on Sun, 11 Mar 2007 14:37:49 GMT]]></title><description><![CDATA[<p>Ach so ich hab gedacht der macht das automatisch. Dann lass ich einfach den Copy Konstruktor mal weg (is mir auch zuviel Schreibarbeit, und solange man ja keine Zeiger hat die auf Speicher auf dem Heap verweisen ist das ja egal), und der nimmt dann einfach den ganz normalen Standrad Kopierkonstruktor, oder ich könnt in meinem Kopierkonstruktor &quot;itsAge&quot; auch einfach mit &quot;rhs.GetAge&quot; zuweisen? Ja ich glaub ich habs kapiert.</p>
<p>Ah ja so geht:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

class Mammal
{
    public:
    Mammal(int Age);
    //Mammal(const Mammal &amp;rhs);
    virtual ~Mammal();
    void SetAge(int a) {itsAge=a;}
    int GetAge() {return itsAge;}
    virtual Mammal * Clone() const {return new Mammal(*this);}
    virtual void Speak() const {cout &lt;&lt; &quot;Mammal spricht\n&quot;;}

    protected:
    int itsAge;
};

Mammal::Mammal(int Age)
:itsAge(Age)
{

}

/*Mammal::Mammal(const Mammal &amp;rhs)
{

}*/

Mammal::~Mammal()
{

}

class Dog : public Mammal
{
    public:
    Dog(int Age);
    Dog(const Dog &amp;rhs);
    ~Dog();
    Mammal * Clone() const {return new Dog(*this);}
    void Speak() const {cout &lt;&lt; &quot;WAU WAU\n&quot;;}
};

Dog::Dog(int Age)
:Mammal(Age)
{

}

Dog::Dog(const Dog &amp;rhs)
:Mammal(rhs)
{

}

Dog::~Dog()
{

}

int main()
{
    int choice;
    Mammal *Array[2];
    Mammal *ptr;
    for (int i=0;i&lt;2;i++)
    {
        cout &lt;&lt; &quot;Dog(0) Mammal(1)\n&quot;;
        cin &gt;&gt; choice;
        switch(choice)
        {
            case 0:
            ptr=new Dog(10);
            break;
            case 1:
            ptr=new Mammal(20);
            break;
        }
        Array[i]=ptr;
    }
    Mammal *OtherArray[2];
    cout &lt;&lt; &quot;\nTEST\n\n&quot;;
    for (int i=0;i&lt;2;i++)
    {
        cout &lt;&lt; Array[i]-&gt;GetAge() &lt;&lt; endl;
        Array[i]-&gt;Speak();
        OtherArray[i]=Array[i]-&gt;Clone();
    }
    cout &lt;&lt; &quot;###########################################\n&quot;;
    for (int i=0;i&lt;2;i++)
    {
        cout &lt;&lt; OtherArray[i]-&gt;GetAge() &lt;&lt; endl;
        OtherArray[i]-&gt;Speak();
    }

    return 0;
}
</code></pre>
<p>Hatte einen kleinen Denkfehler. Dankeschön.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1243409</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1243409</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Sun, 11 Mar 2007 14:37:49 GMT</pubDate></item></channel></rss>