Variablen in einer Methode Speichern und in einer anderen Aufrufen... aber wie?



  • Hallo allerseits,

    Ich habe ein Problem.

    Ich schreibe zur Zeit ein Programm was mir eine komplette Kurvendiskussion berechnen soll.

    Mein Problem ist folgendes:

    Ich Bin vom Main zu einer Methode gegangen, in welcher ich den Benutzer Auffordere Werte einzugeben. Mit diesen Werten bin ich mehrere Methoden durchlaufen und anschließend in eine Methode gegangen wo ich meine Variablen nicht mit hin nehme. Von dort aus hat der Nutzer die möglichkeit auszuwählen einen passenden y-wert zu einem von ihm eingegebenen x-wert zu errechnen, aber die eingaben sind nicht in dieser methode gespeichert. kann ich irgendwie wieder von da aus an die variablen aus der eingabe ran kommen?

    Ich habe ein Main und zum beispiel 4 Methoden... Ich stelle das jetzt etwas vereinfacht dar:

    void ywert()
    {
      //Hier benötige ich wieder die vom Benutzer eigegeben werte aus "FunktionEingeben". ABer wie komme ich da ran?
    }
    
    void menu()
    {
        cout<<"Drücke 1 um einen y-wert zu einem X-wert zu berechnen";
        int auswahl;
        cin>>auswahl;
        if(auswahl==1)
        {
            ywert();
        }
    }
    
    void bearbeiten(double x2, double x, double c)
    {
        //Die rechnung mit diesen werten
        menu();
    }
    
    void FunktionEingeben()
    {
        cout<<"x hoch 2: ";
        double x2;
        cin>>x2;
        cout<<"x: ";
        double x;
        cin>>x;
        cout<<"Constante: ";
        double c;
        cin>>c;
        cout<<"\n";
    
    bearbeiten(x2, x, c);
    }
    
    int main()
    {
        //Begrüßung und so weiter
        FunktionEingeben();
    }
    

    Ich hoffe das Wort "Methoden" ist richtig, das hat uns der lehrer so beigebracht 🙂

    Ich hoffe auf gute hilfe und danke im voraus



  • Unschön: Speicher die Daten Global

    Alternative:

    - Pack sie in eine Struktur/Klasse (mit new erstellt) und übergeb immer einen Pointer bei den Funktionsaufrufen

    - Mach eine Singelton Klasse und speicher darin die Daten



  • Matyr schrieb:

    Alternative:

    - Pack sie in eine Struktur/Klasse (mit new erstellt) und übergeb immer einen Pointer bei den Funktionsaufrufen

    - Mach eine Singelton Klasse und speicher darin die Daten

    mit der information kann ich leider noch nichts anfangen weil mein wissen recht begrenzt ist... mit anderen worten... ich weis nicht was du meinst 😞



  • baxitus schrieb:

    Matyr schrieb:

    Alternative:

    - Pack sie in eine Struktur/Klasse (mit new erstellt) und übergeb immer einen Pointer bei den Funktionsaufrufen

    - Mach eine Singelton Klasse und speicher darin die Daten

    mit der information kann ich leider noch nichts anfangen weil mein wissen recht begrenzt ist... mit anderen worten... ich weis nicht was du meinst 😞

    Was eine Klasse ist.. naja da gibts genug Literatur dazu.
    http://www.cplusplus.com/doc/tutorial/

    Ein Singleton ist eine Klasse, die nur einmal pro POrogramm existiert. Die Instanzierung wird durch private/public Mechanismen verhindert.

    Beispiel:

    class MySingleton
    {
    private:
         MySingleton() : m_foobar(0)
         {}
    
         MySingleton(const MySingleton&) 
         {}
    
         MySingleton& operator=(const MySingelton&)
         { return *this; }
    
        int m_foobar;
    
    public:
        static MySingleton& getInstance() 
        {
            static MySingleton TheOneAndOnly;
            return TheOneAndOnly;
        }
    
        int getData() const { return m_foobar; }
    };
    

    Die Methode getData() kannst Du jetzt nur über den Getter erreichen:

    MySingleton::getInstance().getData()
    

    Dadurch dass die Variable statisch ist, wird sie nur einmal im Programmverlauf erzeugt. Ein erneutes erzeugen der Klasse ist unmöglich.

    Du musst halt dafür sorgen, dass Deine Variablen solange leben wie Dein Programm läuft. Am besten geht das in C++ mit Klassen. Dort kannst Du Deine Funktionen und Daten unterbringen und die Klasse in sich arbeiten. Ausserdem kann man ein großes Problem auf mehrere kleine runterbrechen und so viel schneller vorankommen. Aber Du solltest vllt ein Buch lesen..
    rya.



  • kann ich dem programm nicht einfach sagen "Speicher die Variablen in datei.txt und lade sie später wieder raus"?



  • baxitus schrieb:

    kann ich dem programm nicht einfach sagen "Speicher die Variablen in datei.txt und lade sie später wieder raus"?

    Natürlich kannst Du das. Allerdings wird es später schwer ohne Verständnis für Klassen und OOP in C++ auszukommen. Du solltest vllt eher dann C lernen wenn Dir prozedurale Programmierung lieber ist.
    Google-Stichwort für dein problem ist "filestreams, ostream".
    http://www.cplusplus.com/reference/iostream/ofstream/
    rya.



  • Wir sind in der schule halt noch nicht so weit... wir haben grade angefangen mit diesen methoden umzugehen und der lehrer will und die nächste zeit zum objektorientierten Programmieren leiten.



  • Methoden nennt man Funktionen, die in einer Klasse sind. Diese Funktionen hier liegen nicht in einer, sind folglich also auch keine Methoden, da benutzt dein Lehrer die Begriffe leider falsch.

    Was Du hier suchst, ist call by reference, jedenfalls ist das eine Moeglichkeit:

    void machwas(int& a)
    {
    a = 10;
    }
    
    int main()
    {
    int c;
    machwas(c);
    std::cout << "Wert von c: " << c;
    return 0;
    }
    

    Wenn ihr das weitere Zeug noch lernt, ist ja gut. Und globale Variablen funktionieren wie gesagt auch.



  • Eisflamme schrieb:

    Methoden nennt man Funktionen, die in einer Klasse sind. Diese Funktionen hier liegen nicht in einer, sind folglich also auch keine Methoden, da benutzt dein Lehrer die Begriffe leider falsch.

    Was Du hier suchst, ist call by reference, jedenfalls ist das eine Moeglichkeit:

    void machwas(int& a)
    {
    a = 10;
    }
    
    int main()
    {
    int c;
    machwas(c);
    std::cout << "Wert von c: " << c;
    return 0;
    }
    

    Wenn ihr das weitere Zeug noch lernt, ist ja gut. Und globale Variablen funktionieren wie gesagt auch.

    Sag doch gleich entweder Member-Funktionen oder Nicht-Member-Funktionen bzw. freie Funktionen. Find ich weit aus verständlicher und leichter zu merken=)

    Lg freeG



  • Warum übergibst du x2, x und c nicht einfach an menu() und von dort aus an ywert()? Soweit ich verstanden habe, willst du die Variablen ja nicht verändern, oder?


Anmelden zum Antworten