Warum erfolgt in C++ diese Ausgabe?

Von: , Frage gestellt am Sa, 15. Aug 2009

Hallo, gegeben ist folgender C++-Code:

#include <iostream>
#include <string>
using namespace std;

class Myclass
{
private:
string Name;
public:
Myclass (string name)
{
cout << "Hallo" << endl;
Name = name;
}

Myclass (Myclass& instance)
{
cout << "CreateFromInstance" << endl;
Name = instance.Name;
}

~Myclass ()
{
cout << "Bye" << endl;
}

string GetName()
{
return Name;
}
};

void print(Myclass m)
{
cout << "Sein Name ist " << m.GetName() << endl;
}

int main ()
{
Myclass instance ("Hans");
{
Myclass anotherinstance ("Karl");
}

print (instance);

return 0;
}

Die Ausgabe lautet:
Hallo
Hallo
Bye
CreateFromInstance
Sein Name ist Hans
Bye
Bye

Warum ist das so?

Danke!

1 Antworten zu dieser Frage

  1. Antwort von nach 2 Tagen 0 hilfreich
    Re: Warum erfolgt in C++ diese Ausgabe?

    1. Ausgabe: Hallo -> Du erzeugst die Instanz instance und der Konstruktur wird aufgerufen in welchem cout<<hallo ausgeführt wird

    2. Ausgabe: Hallo -> Du erzeugst die 2 Instanz (siehe 1)

    3. Ausgabe: Bye -> anotherinstance wurde auf dem Stack
    erzeugt (ohne new) und stirbt nach dem aktuellen Block -> Aufruf Destruktor

    4. Ausgabe: CreateFromInstance -> Du machst übergist als Parameter ein Objekt der Print. Dadurch wird der Copykonstruktor aufgerufen der in diesem Fall deinem 2ten Konstruktor entspricht in welchem der cout ausgeführt wird.

    5. Ausgabe: Sein Name ist Hans -> Die Print führt nun mit dem kopierten Objekt den cout durch.

    6. Ausgabe: Bye -> Die print Methode ist zuende. Da auch das kopierte Ojekt auf dem Stack erzeugt wurde, wird es nun der Destruktor aufgerufen um danach das Objekt zu zerstören.

    7. Ausgabe: Bye -> Die main Methode ist zuende und das
    Objekt instance welches auch lediglich auf dem Stack existiert stirbt -> Aufruf Destruktor

    Ich denke das müsste so stimmen. Falls nicht bitte ich um Korrektur :-)
    MfG

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!