Hilfe?!



  • hallo!

    ich hoffe ich beleidige euch nicht mit solch (wahrscheinlich) simplen fragen:

    1. kann mir jemand sagen, was an der markierten stelle im programm genau passiert?

    2. warum wird der kopierkonstruktor aufgerufen, indem man den adressoperator hinter dem objektnamen setzt?

    #include <iostream.h>
    
    class SimpleCat
    {
      public:
    	SimpleCat ();                    // Konstruktor
    	SimpleCat(SimpleCat&);     // Kopierkonstruktor
    	~SimpleCat();                    // Destruktor
    };
    
    SimpleCat::SimpleCat()
    {
    	cout << "SimpleCat Konstruktor...\n";
    }
    
    SimpleCat::SimpleCat(SimpleCat&)
    {
    	cout << "SimpleCat Kopierkonstruktor...\n";
    }
    
    SimpleCat::~SimpleCat()
    {
    	cout << "SimpleCat Destruktor...\n";
    }
    
    [b]SimpleCat FunctionOne (SimpleCat theCat);
    SimpleCat* FunctionTwo (SimpleCat *theCat);[/b]
    
    int main()
    {
    	cout << "Eine Katze erzeugen...\n";
    	SimpleCat Frisky;
    	cout << "FunctionOne aufrufen...\n";
    	FunctionOne(Frisky);
    	cout << "FunctionTwo aufrufen...\n";
    	FunctionTwo(&Frisky);
    	return 0;
    }
    
    // FunctionOne, Übergabe als Wert
    SimpleCat FunctionOne(SimpleCat theCat)
    {
    	cout << "FunctionOne. Rueckkehr...\n";
    	return theCat;
    }
    
    // FunctionTwo, Übergabe als Referenz
    SimpleCat* FunctionTwo (SimpleCat  *theCat)
    {
    	cout << "FunctionTwo. Rueckkehr...\n";
    	return theCat;
    }
    

    danke für eure mühe



  • Hallo,

    ich hoffe ich beleidige euch nicht mit solch (wahrscheinlich) simplen fragen:

    Ne, aber du solltest nächstes Mal eine andere Überschrift wählen. Die ist recht unaussagekräftig.

    1. kann mir jemand sagen, was an der markierten stelle im programm genau passiert?

    Nix, es handelt sich nur um Funktionsdeklarationen. Du sagst dem Kompiler, dass es irgendwo 2 Funktionen mit diesen Signaturen gibt. Die erste erwartet einen Objekt vom Typ "SimpleCat" und gibt diese zurück, die zweite erwartet einen Zeiger auf ein Objekt vom Typ "SimpleCat".

    2. warum wird der kopierkonstruktor aufgerufen, indem man den adressoperator hinter dem objektnamen setzt?

    Das ist die Deklaration des Kopierkonstruktors, welcher immer dann aufgerufen wird, wenn ein Objekt kopiert wird. Also z. B.:

    FunctionOne(Frisky);
    

    Es ist so festgelegt, dass der Copykonstruktor als einzigen Parameter eine Referenz (die durch das & gekennzeichnet wird) auf sich selbst besitzt.


Anmelden zum Antworten