if anweisung bei Klassen



  • Hallo,

    ich versuche gerade mal mit Klassen und if anweisungen was zu machen. :xmas1:

    Wenn ich 1 drücke dann geht das Programm in die Funktion test(); aber wenn ich 2 drücke dann geht der anstatt in die Funktion test2(); auch einfach in die Funktion test(); -.-

    Hier ist mal der Source Code:

    #include <iostream>
    #include <iomanip>
    
    using namespace std; 
    
    // Klassendefinition 
    class hello
    { 
    
    private:
    int zahl1,zahl2,erg;          //deklaration der integer sachen
    
    public: 
    
    // Memberfunktionen
    int start();
    int test();
    int test2();
    
    }; 
    
    // Definition der Memberfunktionen 
    
    int hello::start()
    {
    cout<<"Geben sie eine Zahl ein: ";
    cin>>zahl1;
    return 0;
    }
    
    int hello::test()
    {
    cout<<"Das hier ist die test funktion\n";
    return 0;
    }
    
    int hello::test2()
    {
    cout<<"Das hier ist die TEST 2 funktion\n";
    return 0;
    }
    
    // HAUPTPROGRAMM 
    int main() 
    
    {
    
    int zahl1;
    
    hello r;
    r.start();
    
    if (zahl1==1)
    r.test();
    
    else
    
    r.test2();
    
    system("PAUSE");
    }
    


  • 😮 Woher soll denn das Hauptprogramm erfahren, was eingegeben wurde, wenn du diese Information nicht weitergibst? Du solltest (a) in der start() den "richtigen" (sprich: den eingelesenen) Wert zurückgeben anstelle von 0 und (b) im Hauptprogramm den zurückgegebenen Wert in einer Variable auffangen, damit du ihn für irgendwas verwenden kannst.

    (momentan ist 'zahl1' nicht einmal initialisiert - und es hängt vom Glück ab, in welchem Teil des if() du landest)

    PS: Ich schlage dir vor, dein Tutorial nochmal von vorne zu beginnen - und diesmal etwas sorgfältiger zu lesen. Nach deinen letzten Threads zu urteilen, sind da schon die elementaren Grundlagen untergegangen.



  • du greifst auf eine uninitialisierte variable in der main-function zu..

    EDIT: sorry bin grad nicht klar gekommen..
    machs so:

    #include <iostream>
    #include <iomanip>
    
    using namespace std; 
    
    // Klassendefinition 
    class hello
    { 
    private:
    	int zahl1,zahl2,erg;          //deklaration der integer sachen
    
    public: 
    	// Memberfunktionen
    	int start();
    	int test();
    	int test2();
    
    	int GetZahl1();
    	int GetZahl2();
    }; 
    
    // Definition der Memberfunktionen 
    int hello::GetZahl1();
    {
    	return zahl1;
    }
    
    int hello::GetZahl2()
    {
    	return zahl2;
    }
    
    int hello::start()
    {
    	cout<<"Geben sie eine Zahl ein: ";
    	cin>>zahl1;
    	return 0;
    }
    
    int hello::test()
    {
    	cout<<"Das hier ist die test funktion\n";
    	return 0;
    }
    
    int hello::test2()
    {
    	cout<<"Das hier ist die TEST 2 funktion\n";
    	return 0;
    }
    
    // HAUPTPROGRAMM 
    int main() 
    {
    	hello r;
    	r.start();
    
    	if (r.GetZahl1() == 1)
    		r.test();
    	else
    		r.test2();
    
    	system("PAUSE");
    }
    


  • funktioniert die edit-funktion grad irgendwie nicht? hier nochmal der source von mir:

    #include <iostream>
    #include <iomanip>
    
    using namespace std; 
    
    // Klassendefinition 
    class hello
    { 
    private:
    	int zahl1,zahl2,erg;          //deklaration der integer sachen
    
    public: 
    	// Memberfunktionen
    	int start();
    	int test();
    	int test2();
    
    	int GetZahl1();
    	int GetZahl2();
    }; 
    
    // Definition der Memberfunktionen 
    int hello::GetZahl1();
    {
    	return zahl1;
    }
    
    int hello::GetZahl2()
    {
    	return zahl2;
    }
    
    int hello::start()
    {
    	cout<<"Geben sie eine Zahl ein: ";
    	cin>>zahl1;
    	return zahl1;
    }
    
    int hello::test()
    {
    	cout<<"Das hier ist die test funktion\n";
    	return 0;
    }
    
    int hello::test2()
    {
    	cout<<"Das hier ist die TEST 2 funktion\n";
    	return 0;
    }
    
    // HAUPTPROGRAMM 
    int main() 
    {
    	hello r;
    	r.start();
    
    	if (r.GetZahl1() == 1)
    		r.test();
    	else
    		r.test2();
    
    	system("PAUSE");
    }
    


  • dein problem ist ganz simpel..
    in deinem programm überprüfst du welchen wert die variable zahl1 hat,
    jedoch hast du da einen kleinen denkfehler..

    wenn du die funktion
    r.start()
    ausführst, übergibst du der MEMBERvariable zahl1 einen wert.

    in deiner main() überprüfst du jedoch nicht den wert dieser membervariable,
    sondern den wert der funktionsvariable.

    ich zeige dir was ich meine anhand eines beispiels:

    class hello
    {
    private:
    		// m e m b e r _ v a r i a b l e n
    	int m_zahl1;
    	int m_zahl2;
    	int m_erg;
    
    public:
    		// m e m b e r _ f u n k t i o n e n
    	int start	();
    	int test	();
    	int test2	();
    
    }; // class hello
    
    int hello::start()
    {
    	cout << "Geben Sie eine Zahl ein: ";
    	cin >> m_zahl1;
    } // start()
    
    int main()
    {
    	int zahl1;
    
    	hellor r;
    	r.start();	// zahl1 bekommt bei dir keinen wert, sondern m_zahl1
    
    	if(zahl1 == 1)
    	{
    		r.test();
    	}
    	else
    	{
    		r.test2();
    	}
    
    	getchar(); // gleich wie system("PAUSE") nur empfehlenswerter
    	return 0;
    } // main()
    

    dein programm würde sich so verhalten wie du es benötigst wenn du folgendes änderst:
    beachte: ich mache vor die membervariablen ein "m_" damit ich diese leichter erkenne..

    int hello::start()
    {
    	cout << "Geben Sie eine Zahl ein: ";
    	cin >> m_zahl1;
    
    	return m_zahl1;
    } // start()
    
    int main()
    {
    	hello r;
    
    	int zahl1 = r.start();
    
    	if(zahl1 == 1)
    	{
    		r.test();
    	}
    	else
    	{
    		r.test2();
    	}
    } // main()
    


  • ok thx jetzt hats geklappt 🙂

    @CStoll in dem Tutorial stand leider nichts von if anweisungen bei klassen 😞

    aber diese zeile hier: int zahl1=r.calc();

    Wie kann ich formulieren was das Programm da macht weil ich mach mir immer kommentare an stellen im programm die ich nicht richtig verstanden habe, aber irgendwie krieg ich es gerade net das dass zu formulieren XD



  • sAmson ftw schrieb:

    @CStoll in dem Tutorial stand leider nichts von if anweisungen bei klassen 😞

    Liegt wohl daran, daß die if()-Anweisung in Klassen genauso funktioniert wie die "normale" if()-Anweisung.

    aber diese zeile hier: int zahl1=r.calc();

    Wie kann ich formulieren was das Programm da macht weil ich mach mir immer kommentare an stellen im programm die ich nicht richtig verstanden habe, aber irgendwie krieg ich es gerade net das dass zu formulieren XD

    Das Programm ruft die Methode calc() des Objekts r auf und weist deren Rückgabewert anschließend der Variable zahl1 zu.



  • ok thx

    ps. Ohne Klassen kann ich die if anweisung 🙂 aber naja ich übe mal weiter :xmas1:



  • Du kannst die if-Anweisung auch mit Klassen. Dein Problem bezog sich auf das Konzept des Geltungsbereichs (aka Scope).

    Du darfst nun drei mal raten, was folgendes Programm ausgibt:

    #include <iostream>
    using namespace std;
    
    class hello
    {
    public:
    	int zahl1;	
    };
    
    int main()
    {
        int zahl1;
        hello h;
    
        h.zahl1 = 1;
        zahl1 = 2;
    
        cout << h.zahl1 << "\n";
        cout << zahl1 << endl;
    }
    


  • idle schrieb:

    Du kannst die if-Anweisung auch mit Klassen. Dein Problem bezog sich auf das Konzept des Geltungsbereichs (aka Scope).

    Du darfst nun drei mal raten, was folgendes Programm ausgibt:

    #include <iostream>
    using namespace std;
    
    class hello
    {
    public:
    	int zahl1;	
    };
    
    int main()
    {
        int zahl1;
        hello h;
        
        h.zahl1 = 1;
        zahl1 = 2;
    
        cout << h.zahl1 << "\n";
        cout << zahl1 << endl;
    }
    

    sehr schlechter programmierstil... 🙄 😉 :xmas1:



  • @Machine: Ja, man sollte eigentlich den Zugriff auf Member-Variablen mittels Methoden zentral kontrollierbar machen, so wie du es getan hast.

    Aber so wird es vielleicht deutlicher, dass zahl1 der Funktion main gehört und h.zahl1 sich auf das Objekt h des Klassentyps hello bezieht, ohne dass die if-Anweisung etwas dafür kann.



  • sollte ja auch nicht böse gemeint sein... du hast das ";)" gesehen?



  • Machine schrieb:

    sollte ja auch nicht böse gemeint sein... du hast das ";)" gesehen?

    Habe ich gesehen, aber ich hätte den schlechten Programmierstil erläutern sollen 🙂



  • Die ausgabe lautet:

    1
    2

    :xmas1: :xmas2:


Anmelden zum Antworten