<?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[Konstruktor und Destruktor]]></title><description><![CDATA[<p><em><strong>N00b Alarm</strong></em></p>
<p>Hallo ich arbeite gerade ein Buch über Cpp durch welches schon etwas älter ist aber ist ja nicht so wichtig, zu Problem.</p>
<p>Ich habe folgendes program abgeschrieben, es funktioniert auch und ich verstehe es...</p>
<pre><code class="language-cpp">#include &lt;cstdlib&gt;
#include &lt;iostream&gt;

using namespace std;

class Cat
{
    public:                     // Beginn der Klassendeklaration
        int GetAge();           // Zugriffsfunktion
        void SetAge(int age);   // Zugriffsfunktion
        void meow();            // Allgemeine Funktion

    private:                    // Beginn des privaten Abschitts
        int itsAge;             // Elementvariable
};

// Die oeffentlich Zugriffsfunktion GetAge gibt
// den Wert des Datenelements itsAge zurueck.

int Cat::GetAge()
{
    return itsAge;
}

//Definition der oeffentlichen
// Zugriffsfunktion SetAge.
// Gibt Datenelement itsAge zurueck.
void Cat::SetAge(int age)
{
    // Elementvariable itsAge auf den als
    // Parameter age uebergebenen Wert sezten.
    itsAge = age;
}

//Definition der Methode Meow
// Rueckgabe: void
// Parameter: Keine
//Aktion: Gibt &quot;miau&quot; auf dem Bildschirm aus.
void Cat::meow()
{ 
    cout &lt;&lt; &quot;Miau&quot; &lt;&lt; endl;
}

//Eine Katze erzeugen, Alter festlegen, Mmieauen lassen
// Alter mitteilen lassen, dann erneut miauen.

int main(int argc, char *argv[])
{

    int age;

    Cat Luzi;
    Cat Kimi;
    cout &lt;&lt; &quot;Wie alt ist Luzi? &gt;&gt; &quot;;
        cin &gt;&gt; age;
        cout &lt;&lt; endl;

    Luzi.SetAge(age);

        cout &lt;&lt; &quot;Wie alt ist Kimi? &gt;&gt; &quot;;
        cin &gt;&gt; age;
        cout &lt;&lt; endl;

    Kimi.SetAge(age);

    Luzi.meow();

    cout &lt;&lt; &quot;Luzi ist &quot; &lt;&lt; Luzi.GetAge() &lt;&lt; &quot; Jahre alt.&quot; &lt;&lt; endl;

    Luzi.meow();
    Kimi.meow();

    cout &lt;&lt; &quot;Kimi ist &quot; &lt;&lt; Kimi.GetAge() &lt;&lt; &quot; Jahre alt.&quot; &lt;&lt; endl;

    Kimi.meow();

    system(&quot;PAUSE&quot;);
    return EXIT_SUCCESS;
}
</code></pre>
<p>dann sollte das ganze beispiel darauf umgeschrieben werden<br />
zwecks der Demonstration von Konstruktor und Destruktor</p>
<pre><code class="language-cpp">#include &lt;cstdlib&gt;
#include &lt;iostream&gt;

using namespace std;

class Cat                       // Beginn der Klassendeklaration
{
     public:                    // Beginn des oeffentlichen Abschnitts
   -&gt;    Cat(int initialAge);    // Konstruktor
   -&gt;   ~Cat();                 // Destruktor
        int GetAge();           // Zugriffsfunktion
        void SetAge(int age);   // Zugriffsfunktion
        void meow();            // Allgemeine Funktion

    private:                    // Beginn des privaten Abschitts
        int itsAge;             // Elementvariable
};

(hier)
//Konstruktor von Cat
Cat::Cat(int initialAge)
{
    itsAge = initialAge;
}
(hier)
//Destruktor
Cat::~Cat()
{
}

// Die oeffentlich Zugriffsfunktion GetAge gibt
// den Wert des Datenelements itsAge zurueck.

int Cat::GetAge()
{
    return itsAge;
}

//Definition der oeffentlichen
// Zugriffsfunktion SetAge.
// Gibt Datenelement itsAge zurueck.
void Cat::SetAge(int age)
{
    // Elementvariable itsAge auf den als
    // Parameter age uebergebenen Wert sezten.
    itsAge = age;
}

//Definition der Methode Meow
// Rueckgabe: void
// Parameter: Keine
//Aktion: Gibt &quot;miau&quot; auf dem Bildschirm aus.
void Cat::meow()
{ 
    cout &lt;&lt; &quot;Miau&quot; &lt;&lt; endl;
}

//Eine Katze erzeugen, Alter festlegen, Mmieauen lassen
// Alter mitteilen lassen, dann erneut miauen.

int main(int argc, char *argv[])
{

    int age;

    Cat Luzi;
    Cat Kimi;
    cout &lt;&lt; &quot;Wie alt ist Luzi? &gt;&gt; &quot;;
        cin &gt;&gt; age;
        cout &lt;&lt; endl;

    Luzi.SetAge(age);

        cout &lt;&lt; &quot;Wie alt ist Kimi? &gt;&gt; &quot;;
        cin &gt;&gt; age;
        cout &lt;&lt; endl;

    Kimi.SetAge(age);

    Luzi.meow();

    cout &lt;&lt; &quot;Luzi ist &quot; &lt;&lt; Luzi.GetAge() &lt;&lt; &quot; Jahre alt.&quot; &lt;&lt; endl;

    Luzi.meow();
    Kimi.meow();

    cout &lt;&lt; &quot;Kimi ist &quot; &lt;&lt; Kimi.GetAge() &lt;&lt; &quot; Jahre alt.&quot; &lt;&lt; endl;

    Kimi.meow();

    system(&quot;PAUSE&quot;);
    return EXIT_SUCCESS;
}
</code></pre>
<p>dann bekomme ich eine Fehlermeldung vom Compiler</p>
<p>---&gt;<br />
In function int main(int, char**)<br />
no matching function for call to Cat::Cat<br />
canidates are Cat::Cat(Const Cat&amp;<br />
Cat::Cat(int)</p>
<p>Warum?<br />
das mit dem Konstruktor und Destruktor verstehe ich nioch nicht ganz, ich möchte aber jetzt bitte nur wissen warum das beispiel aus dem Buch nciht funktioniert.</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/142994/konstruktor-und-destruktor</link><generator>RSS for Node</generator><lastBuildDate>Wed, 02 Sep 2026 00:14:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/142994.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 04 Apr 2006 19:25:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Konstruktor und Destruktor on Tue, 04 Apr 2006 19:25:10 GMT]]></title><description><![CDATA[<p><em><strong>N00b Alarm</strong></em></p>
<p>Hallo ich arbeite gerade ein Buch über Cpp durch welches schon etwas älter ist aber ist ja nicht so wichtig, zu Problem.</p>
<p>Ich habe folgendes program abgeschrieben, es funktioniert auch und ich verstehe es...</p>
<pre><code class="language-cpp">#include &lt;cstdlib&gt;
#include &lt;iostream&gt;

using namespace std;

class Cat
{
    public:                     // Beginn der Klassendeklaration
        int GetAge();           // Zugriffsfunktion
        void SetAge(int age);   // Zugriffsfunktion
        void meow();            // Allgemeine Funktion

    private:                    // Beginn des privaten Abschitts
        int itsAge;             // Elementvariable
};

// Die oeffentlich Zugriffsfunktion GetAge gibt
// den Wert des Datenelements itsAge zurueck.

int Cat::GetAge()
{
    return itsAge;
}

//Definition der oeffentlichen
// Zugriffsfunktion SetAge.
// Gibt Datenelement itsAge zurueck.
void Cat::SetAge(int age)
{
    // Elementvariable itsAge auf den als
    // Parameter age uebergebenen Wert sezten.
    itsAge = age;
}

//Definition der Methode Meow
// Rueckgabe: void
// Parameter: Keine
//Aktion: Gibt &quot;miau&quot; auf dem Bildschirm aus.
void Cat::meow()
{ 
    cout &lt;&lt; &quot;Miau&quot; &lt;&lt; endl;
}

//Eine Katze erzeugen, Alter festlegen, Mmieauen lassen
// Alter mitteilen lassen, dann erneut miauen.

int main(int argc, char *argv[])
{

    int age;

    Cat Luzi;
    Cat Kimi;
    cout &lt;&lt; &quot;Wie alt ist Luzi? &gt;&gt; &quot;;
        cin &gt;&gt; age;
        cout &lt;&lt; endl;

    Luzi.SetAge(age);

        cout &lt;&lt; &quot;Wie alt ist Kimi? &gt;&gt; &quot;;
        cin &gt;&gt; age;
        cout &lt;&lt; endl;

    Kimi.SetAge(age);

    Luzi.meow();

    cout &lt;&lt; &quot;Luzi ist &quot; &lt;&lt; Luzi.GetAge() &lt;&lt; &quot; Jahre alt.&quot; &lt;&lt; endl;

    Luzi.meow();
    Kimi.meow();

    cout &lt;&lt; &quot;Kimi ist &quot; &lt;&lt; Kimi.GetAge() &lt;&lt; &quot; Jahre alt.&quot; &lt;&lt; endl;

    Kimi.meow();

    system(&quot;PAUSE&quot;);
    return EXIT_SUCCESS;
}
</code></pre>
<p>dann sollte das ganze beispiel darauf umgeschrieben werden<br />
zwecks der Demonstration von Konstruktor und Destruktor</p>
<pre><code class="language-cpp">#include &lt;cstdlib&gt;
#include &lt;iostream&gt;

using namespace std;

class Cat                       // Beginn der Klassendeklaration
{
     public:                    // Beginn des oeffentlichen Abschnitts
   -&gt;    Cat(int initialAge);    // Konstruktor
   -&gt;   ~Cat();                 // Destruktor
        int GetAge();           // Zugriffsfunktion
        void SetAge(int age);   // Zugriffsfunktion
        void meow();            // Allgemeine Funktion

    private:                    // Beginn des privaten Abschitts
        int itsAge;             // Elementvariable
};

(hier)
//Konstruktor von Cat
Cat::Cat(int initialAge)
{
    itsAge = initialAge;
}
(hier)
//Destruktor
Cat::~Cat()
{
}

// Die oeffentlich Zugriffsfunktion GetAge gibt
// den Wert des Datenelements itsAge zurueck.

int Cat::GetAge()
{
    return itsAge;
}

//Definition der oeffentlichen
// Zugriffsfunktion SetAge.
// Gibt Datenelement itsAge zurueck.
void Cat::SetAge(int age)
{
    // Elementvariable itsAge auf den als
    // Parameter age uebergebenen Wert sezten.
    itsAge = age;
}

//Definition der Methode Meow
// Rueckgabe: void
// Parameter: Keine
//Aktion: Gibt &quot;miau&quot; auf dem Bildschirm aus.
void Cat::meow()
{ 
    cout &lt;&lt; &quot;Miau&quot; &lt;&lt; endl;
}

//Eine Katze erzeugen, Alter festlegen, Mmieauen lassen
// Alter mitteilen lassen, dann erneut miauen.

int main(int argc, char *argv[])
{

    int age;

    Cat Luzi;
    Cat Kimi;
    cout &lt;&lt; &quot;Wie alt ist Luzi? &gt;&gt; &quot;;
        cin &gt;&gt; age;
        cout &lt;&lt; endl;

    Luzi.SetAge(age);

        cout &lt;&lt; &quot;Wie alt ist Kimi? &gt;&gt; &quot;;
        cin &gt;&gt; age;
        cout &lt;&lt; endl;

    Kimi.SetAge(age);

    Luzi.meow();

    cout &lt;&lt; &quot;Luzi ist &quot; &lt;&lt; Luzi.GetAge() &lt;&lt; &quot; Jahre alt.&quot; &lt;&lt; endl;

    Luzi.meow();
    Kimi.meow();

    cout &lt;&lt; &quot;Kimi ist &quot; &lt;&lt; Kimi.GetAge() &lt;&lt; &quot; Jahre alt.&quot; &lt;&lt; endl;

    Kimi.meow();

    system(&quot;PAUSE&quot;);
    return EXIT_SUCCESS;
}
</code></pre>
<p>dann bekomme ich eine Fehlermeldung vom Compiler</p>
<p>---&gt;<br />
In function int main(int, char**)<br />
no matching function for call to Cat::Cat<br />
canidates are Cat::Cat(Const Cat&amp;<br />
Cat::Cat(int)</p>
<p>Warum?<br />
das mit dem Konstruktor und Destruktor verstehe ich nioch nicht ganz, ich möchte aber jetzt bitte nur wissen warum das beispiel aus dem Buch nciht funktioniert.</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1030573</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1030573</guid><dc:creator><![CDATA[Cassiel]]></dc:creator><pubDate>Tue, 04 Apr 2006 19:25:10 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor und Destruktor on Tue, 04 Apr 2006 19:33:49 GMT]]></title><description><![CDATA[<p>Wie du der Fehlermeldung deines Compilers entnehmen kannst, benötigst du einen Default-Ctor, d.h. einen Ctor, der keine Argumente erwartet, um folgendes zu schreiben:</p>
<pre><code class="language-cpp">Cat Luzi;
Cat Kimi;
</code></pre>
<p>Mit den bisherigen Ctoren kannst du ein Objekt vom Typ Cat nur erstellen, indem du du das Alter bereits bei der Initialisierung an das Objekt übergibst, bzw. mit dem Copy-Ctor eine Kopie eines anderen bestehenden Objekts erstellst.</p>
<p>Ließ am besten nochmal die entsprechenden Kapitel in deinem C++-Buch <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>
<p>Gruß Caipi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1030580</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1030580</guid><dc:creator><![CDATA[Caipi]]></dc:creator><pubDate>Tue, 04 Apr 2006 19:33:49 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor und Destruktor on Tue, 04 Apr 2006 19:36:02 GMT]]></title><description><![CDATA[<p>Du hast ja das folgende:</p>
<pre><code class="language-cpp">Cat(int initialAge);

Cat Luzi; 
Cat Kimi;
</code></pre>
<p>Du hast ja nur einen Konstruktor, der einen int Wert erwartet, aber du hast keinen standard Konstruktor, der keinen Wert erwartet wie:</p>
<pre><code class="language-cpp">Cat();
</code></pre>
<p>So weiss der Compiler nicht, was er mit den Zeilen</p>
<pre><code class="language-cpp">Cat Luzi; 
Cat Kimi;
</code></pre>
<p>tun soll, du müsstest also z.B.:</p>
<pre><code class="language-cpp">Cat Luzi(4);
Cat Kimi(10);
</code></pre>
<p>schreiben, oder noch den anderen Konstruktor einfügen.</p>
<p>Edit: Da wahr wohl einer schneller <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1030582</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1030582</guid><dc:creator><![CDATA[lustig]]></dc:creator><pubDate>Tue, 04 Apr 2006 19:36:02 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor und Destruktor on Tue, 04 Apr 2006 22:04:44 GMT]]></title><description><![CDATA[<p>Vielleicht wundert dich jetzt, das</p>
<pre><code class="language-cpp">Cat Luzi;
Cat Kimi;
</code></pre>
<p>nicht mehr funktiniert, obwohl man doch Objekte normalerweise so erstellen kann.<br />
Dazu musst du wissen (wie bereits erläutert), dass der Code gleichbedeutend ist mit:</p>
<pre><code class="language-cpp">Cat Luzi ();
Cat Kimi ();
</code></pre>
<p>Also einem Konstuktoraufruf ohne Parameter.<br />
Dieser &quot;Standartkonstruktor&quot; ohne Parameter wird zusammen mit einem sog.<br />
standart Copy-Konstruktor jedem Objekt vom Compiler automatisch zur Verfügung<br />
gestellt. Das bedeutet, einer Klasse A, wie folgt definiert</p>
<pre><code class="language-cpp">class A
{
public:
   int a;
};
</code></pre>
<p>steht automatisch der parameterlose Konstruktor zur Verfügung,<br />
so dass</p>
<pre><code class="language-cpp">A My_A;  //== A My_A ();
</code></pre>
<p>zulässig ist.<br />
Sobald du dir aber einen eienen Konstruktor schreibst, z.B.</p>
<pre><code class="language-cpp">class A
{
public:
   int a;
   A (int b) {a=b;}
}
</code></pre>
<p>wird der Standartkonstruktor A () von A (int b) &quot;überschrieben&quot;!<br />
Das bedeutet, A () steht nicht mehr zur Verfügung was dazu führt:</p>
<pre><code class="language-cpp">A My_A;        //Fehler! (== A My_A (), und A::A () gibt es nicht mehr, da           
               //von A::A (int b) &quot;überschrieben&quot;
A My_A2 (3);   //OK!!
</code></pre>
<p>Das Problem kannst du einfach dadurch lösen, das du einen eigenen parameterlosen<br />
Konstruktor schreibst.</p>
<pre><code class="language-cpp">class Cat                        // Beginn der Klassendeklaration
{
     public:                     // Beginn des oeffentlichen Abschnitts
   -&gt;    Cat(int initialAge);    // Konstruktor
   -&gt;   ~Cat();                  // Destruktor
   -&gt;    Cat () {}               // Eigener parameterloser Konstruktor
        int GetAge();            // Zugriffsfunktion
        void SetAge(int age);    // Zugriffsfunktion
        void meow();             // Allgemeine Funktion

    private:                     // Beginn des privaten Abschitts
        int itsAge;              // Elementvariable
};
</code></pre>
<p>nun dürfte es keine Probleme mehr geben!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1030670</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1030670</guid><dc:creator><![CDATA[wawawa]]></dc:creator><pubDate>Tue, 04 Apr 2006 22:04:44 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor und Destruktor on Wed, 05 Apr 2006 06:59:05 GMT]]></title><description><![CDATA[<p>wawawa schrieb:</p>
<blockquote>
<p>Vielleicht wundert dich jetzt, das</p>
<pre><code class="language-cpp">Cat Luzi;
Cat Kimi;
</code></pre>
<p>[...] dass der Code gleichbedeutend ist mit:</p>
<pre><code class="language-cpp">Cat Luzi ();
Cat Kimi ();
</code></pre>
</blockquote>
<p>Träum weiter! Da ist überhaupt nichts gleich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1030727</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1030727</guid><dc:creator><![CDATA[Cool-O-Meter |XXXXXX----|]]></dc:creator><pubDate>Wed, 05 Apr 2006 06:59:05 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor und Destruktor on Wed, 05 Apr 2006 07:44:39 GMT]]></title><description><![CDATA[<p>Cool-O-Meter |XXXXXX----| schrieb:</p>
<blockquote>
<p>wawawa schrieb:</p>
<blockquote>
<p>Vielleicht wundert dich jetzt, das</p>
<pre><code class="language-cpp">Cat Luzi;
Cat Kimi;
</code></pre>
<p>[...] dass der Code gleichbedeutend ist mit:</p>
<pre><code class="language-cpp">Cat Luzi ();
Cat Kimi ();
</code></pre>
</blockquote>
<p>Träum weiter! Da ist überhaupt nichts gleich.</p>
</blockquote>
<p>Um es auch für alle verständlich zu formulieren:<br />
Zweiteres sind Funktionsdefinitionen. Es bleibt nur die erstere Schreibweise, oder aber X x = X();</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1030746</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1030746</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Wed, 05 Apr 2006 07:44:39 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor und Destruktor on Wed, 05 Apr 2006 13:39:37 GMT]]></title><description><![CDATA[<p>Danke, jetzt dürfte ich es verstanden haben, aber ich lese trotzdem nochmal das kapitel...</p>
<p>bis dann</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1031103</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1031103</guid><dc:creator><![CDATA[Cassiel(nicht angemeldet)]]></dc:creator><pubDate>Wed, 05 Apr 2006 13:39:37 GMT</pubDate></item></channel></rss>