Klassenobjekte an Funktion übergeben



  • Hallo alle zusammen,

    ich habe gerade begonnen C++ zu lernen und mir ist ein Problem aufgekommen, zu dem ich keine Lösung finde.

    Hier mal der komplette C++ Quellcode:

    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    unsigned short int Test;
    
    class SimpleCat
    {
          public:
                 SimpleCat();
                 SimpleCat(SimpleCat&)     ;
                 ~SimpleCat();
                 int GetAge() const { return itsAge; }
                 void SetAge(int age) { itsAge = age; }
          private:
                  int itsAge;
    };
    
    SimpleCat::SimpleCat()
    {
                          cout << "Simple Cat Konstruktor...\n";
                          itsAge = 1;
    }
    
    SimpleCat::SimpleCat(SimpleCat&)
    {
                                    cout << "Copykonstruktor\n";
    }
    SimpleCat::~SimpleCat()
    {
                           cout << "Simple Cat Destruktor\n";                      
    }
    
    // lediglich eine Kopie der ersten Klasse zum testen !!!!
    
    class SimpleCat2
    {
          public:
                 SimpleCat2();
                 SimpleCat2(SimpleCat2&)     ;
                 ~SimpleCat2();
                 int GetAge() const { return itsAge; }
                 void SetAge(int age) { itsAge = age; }
          private:
                  int itsAge;
    };
    
    SimpleCat2::SimpleCat2()
    {
                          cout << "Simple Cat Konstruktor...\n";
                          itsAge = 1;
    }
    
    SimpleCat2::SimpleCat2(SimpleCat2&)
    {
                                    cout << "Copykonstruktor\n";
    }
    SimpleCat2::~SimpleCat2()
    {
                           cout << "Simple Cat Destruktor\n";                      
    }
    
    // Ende der SimpleCat2
    
    const SimpleCat * const FunctionTwo (const SimpleCat *const theCat);
    
    int main()
    
    {
        SimpleCat Frisky;
        SimpleCat2 Frisky2;
        FunctionTwo(&Frisky);
    
      cin >> Test; // unwichtige Eingabeaufforderung, damit das DOS-Fenster offen bleibt!
    
    }
    
    const SimpleCat * const FunctionTwo (const SimpleCat * const theCat)
    {
          cout << "FunctionTwo. Rückkehr..\n"     ;
          cout << "Frisky ist jetzt " << theCat->GetAge();
          cout << " Jahre alt\n"     ;
          return theCat;
    }
    

    Was ich nicht verstehe ist dieser Teil:

    const SimpleCat * const FunctionTwo (const SimpleCat * const theCat)
    

    01. Was hat dieses SimpleCat vor der Funktion verloren, gibt es dafür eine Erklärung, oder muss ich mir das einfach einprägen, immer die Klasse vor die Funktion zu schreiben, an die ein Objekt übergeben wird oder ist dies nur in diesem speziellen Fall so, weil theCat return(ed) wird?

    Irgendwie komme ich da ins stolpern, ich habe daraufhin probiert, ob es möglich ist, zwei Objekte von zwei verschiedenen Klassen zu übergeben.

    Dafür habe ich folgenden Code benutzt (und den Prototyp und Aufruf auch geändert):

    const SimpleCat, const SimpleCat2 * const FunctionTwo (const SimpleCat * const theCat, const SimpleCat2 * const theCat2)
    {
          cout << "FunctionTwo. Rückkehr..\n"     ;
          cout << "Frisky ist jetzt " << theCat->GetAge();
          cout << " Jahre alt\n"     ;
          return theCat;
    }
    

    Aber irgendetwas will da nicht, klappen - was habe ich falsch verstanden/gemacht?

    02. Wie funktioniert es, wenn man zwei Objekte übergeben möchte?

    Vorab vielen Dank für eure Hilfe!



  • also

    const SimpleCat * const FunctionTwo (const SimpleCat * const theCat
    

    bedeutet nichts weiter als das eine funktion FunctionTwo einen konstanten zeiger von einer SimpleCat instanz uebernimmt und als rueckgabewert ebenfalls einen konstaten zeiger einer SimpleCat instanz zurueckgibt. also das was vor der funktion steht hat nichts mir den uebergebenen parametern zu tun sondern ist lediglich der rueckgabetyp der funktion. und wenn du eine funktion haben willst die 2 parameter uebernimmt schreibst du (zu deinem beispiel) in etwa sowas:

    const SimpleCat * const FunctionTwo (const SimpleCat * const theCat, const SimpleCat2 * const theCat2);
    

    am besten du siehst dir in deinem tut (wohl c++ in 21 tagen) am besten nocheinmal das kapitel ueber funktionen an.



  • so sieht ne c++ funktion aus
    <Rückgabewert>[Klassenname::]<Funktionsname>([Parameter])

    somit is das simplecat in deinem fall der rückgabewert
    ([] heisst optional)



  • Ah vielen Dank, schon kapiert (habe es gleich nochmal mit void probiert - ohne return und es hat super geklappt). Ich war nur (nach dem ganzen Zeiger- und Referenzzeug etwas durcheinander 🙂

    Wow, hast wohl auch C++ in 21 Tagen gelesen 😉

    Vielen Dank!



  • war auch mein erstes c++ buch 🙂


Anmelden zum Antworten