Hilfe bei C++



  • Hallo,

    Wie kann ich grundsätzlich einen Wert, den eine Funktion berechnet einer anderen
    Funktion übergeben?

    Muss ich da aus der Funktion ein Objekt erstellen und dann in einer anderen Datei eine Referenz darauf bilden? 😕
    So hab ich das in dem Buch verstanden, aber das Beispiel war für die Katz.

    Könnte da vielleicht jemand n Beispiel erstellen und Schritt für Schritt erklären?

    🙂

    Ich habe vorher immer prozedural programmiert und mit dieser Objektorientierung komm ich irgendwie nicht klar.

    Danke



  • Dieser Thread wurde von Moderator/in estartu aus dem Forum MFC (Visual C++) in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • huupsi schrieb:

    Wie kann ich grundsätzlich einen Wert, den eine Funktion berechnet einer anderen Funktion übergeben?
    ...
    Ich habe vorher immer prozedural programmiert und mit dieser Objektorientierung komm ich irgendwie nicht klar.

    Grundsätzlich ist hier erstmal die Frage ob du Funktionen oder Methoden (Funktionen von Klassen) meinst.

    huupsi schrieb:

    Muss ich da aus der Funktion ein Objekt erstellen und dann in einer anderen Datei eine Referenz darauf bilden? 😕
    So hab ich das in dem Buch verstanden, aber das Beispiel war für die Katz.

    Grundsätzlich geht die Objektorientierung den Weg das man Daten und zugehörige Funktionalitäten auch vereint. Das heißt aber nicht zwangsweise das du immer gleich Klassen (und Objekte) brauchst.

    1. Funktionen

    int add(int a, int b) {return a+b; }
    int sub(int a, int b) {return a-b; }
    
    int main()
    {
      int ergebnis = add(sub(3, 5), 10);
      // oder einzeln:
      int ergebnis1 = sub(3, 5);
      int ergebnis2 = add(ergebnis1, 10)
    }
    

    2. Methoden
    Hier solltest du grundsätzlich vorher überlegen ob die Ergebnisse Teile des Objektes sind, oder ob sie nur für den Aufruf verwendet werden. In ersteren Fall gibst du der Klasse eine entsprechende Membervariable, im letzteren machst du es auch wie bei Funktionen.

    // Membervariable

    #include <string>
    #include <iostream>
    
    class Person
    {
      private:
        // Name gehört zur Person, also Membervariable
        std::string Name;
        // Vorname gehört zur Person, also Membervariable
        std::string Vorname;
    
      public:
        Person(const std::string& name, const std::string& vorname)
        : Name(name),
          Vorname(vorname)
        {}
    
        std::string GetName() const
        { return this->Name; }
    
        void SetName(const std::string& name)
        { this->Name = name; }
    
        std::string GetVorname() const
        { return this->Vorname; }
    
        void SetVorname(const std::string& vorname)
        { this->Vorname = name; }
    
        std::string GetAnzeigename()
        { return this->Name + ", " + this->Vorname; }
    };
    

    Hier siehst du schon ein Beispiel für den Fall mit der Membervariable. Die Methode GetAnzeigename greift auf die Membervariablen zu, die durch andere Methoden gesetzt wurden.

    Wenn aber die Variable kein sinnvoller Member der Klasse ist, sollte diese wie bei Funktionen als Parameter übergeben werden.

    cu André



  • Naja jede Funktion (außer void => Prozedure) hat einen Rückgabetyp und -wert. Den Typen gibst du im Funktionskopf an (im Beispiel int) und den Rückgabewert gibst du durch return x, wobei x ein Wert vom Rückgabetyp ist.

    int foo() 
    { return 1; }
    

    .
    Funktionsaufrufe kannst du jetzt aber auch einfach verschachteln:

    // Beispielfunktion 01
    int foo() { return 1; }
    // Beispielfunktion 02 (In diesem Fall zum Ausgeben der Daten)
    std::ostream& show_value(std::ostream& out, int value)
    { return (out << value); }
    
    int main()
    {
        std::cout << show_value(std::cout, foo()) << std::endl;
    }
    

    ...


Anmelden zum Antworten