Erste Klassen versuche!



  • jo könnte ich machen aber ich sollte mich noch mal in klassen vertiefen.
    Konstruktoren hatte ich noch nicht es seiden jemand kann mir ein beispielgeben was das ist 🙂 dann kann ich erst mehr sagen 🙂



  • Dafür das noch ganz am Anfang mit den Klassen bist, ist es schon mal sehr lobenswert, das du auch std::string benutzt! 👍 Es gibt hier Spezies die das nach Jahren immer noch nicht raffen und std::string nicht wie selbstverständlich benutzen. 😃

    Als nächstes solltest du dich den Methoden widmen, damit du Datenkapselung betreiben kannst.

    Was ist, wenn jemand für das Alter -100 eingibt? Niemand kann -100 Jahre alt sein. Du könntest diese Prüfung selbst machen, also so:#

    cout<<"\nGeben sie nun das alter an\n";
        cin>>person1.Age;
    
        if(person1.Age <0)
            cout << "niemand kann " << person1.Age << " alt sein!";
    

    Nachteil? Du mußt immer und überall die if-Abfrage einbauen und man kann sie vergessen, man kann sie falsch machen, usw. Nicht gut!

    Deshalb Daten kapeseln:

    class person
    {
    public:
        // müsste normalerweise eine Exception werfen, ist aber eine andere Geschichte. ;-)
        void setAge(int age) {
           if(age < 0)
              cout << "niemand kann " << age << " alt sein!";
           else 
              this->age = age;
        }
    
        int getAge() {
           return age;
        }
    
    private:
        int Age;
    
        // brauchen auch setter und getter:
        string FirstName;
        string LastName;    
        string Gender;
    
    };
    

    Du kannst dann zwar nur noch über die set-/get-Methoden auf die Attribute zugreifen, aber dafür ist immer die if-Abfrage drin.



  • Achja, hab doch noch einen wirklichen Kritikpunkt gefunden: Variablennamen und somit auch Attributnamen immer klein schreiben. Du hast große Anfangsbuchstaben benutzt, das ist schon fast tödlich in freier Wildbahn. 😉 Was erlaubt ist (was ich aber auch nicht mache) die Klassennamen mit einem Großbuchstaben anfangen zu lassen. Das sind halt so die ungeschriebenen Gesätze, an die du dich halten solltest.

    Erlaubt:

    class Person { // Klassennamen groß oder klein. Selber sich für eines entscheiden!
    
    string age;        // klein geschriebene Variablen!
    string firstName;  // zur Trennung CamelCase (Kamelhöcker)
    string last_name;    // oder underscoring
    string Gender;    // sehr schlecht! tödlich! buhhh!
    };
    


  • Jo ich nutze lieber string als char szlol[]; und ich kann es auch besser 😃
    Okay mit private muss ich mich auch noch befassen aber ich denke das erste kapitel der klassen werd ich bis heute abend durch haben 😉
    Okay dann noch danke für die "nette" kritik 🙂
    Ich werd dran arbeiten 🙂

    (Warum Hab ich Immer soviel smilies in 5 sätzen 😉



  • Okay wieder mal ein neuer versuch aber es gibt noch kleine probleme 😞

    #include <iostream>
    using namespace std;
    
    class Taschenrechner
    {
    public:
    	float zahl1;
    	float zahl2;
    
    	void plus(float number1, float number2)
    {
    	cout<<"Ergebnis:"<<number1+number2<<"\n";
    }
    
    void minus(float number1, float number2)
    {
    	cout<<"Ergebnis:"<<number1-number2<<"\n";
    }
    
    void mal(float number1, float number2)
    {
    	cout<<"Ergebnis:"<<number1*number2<<"\n";
    }
    
    void geteilt(float number1, float number2)
    {
    	cout<<"Ergebnis:"<<number1/number2<<"\n";
    }
    
    };
    
    int main ()
    {
    	cout<<"Geben sie die anzahl der rechen durchgänge an!\n";
    	int durchgang;
    	cin>>durchgang;
    	for(int i;i<durchgang;i++)
    	{
    	Taschenrechner v1;
    	cout<<"Geben sie eine zahl ein\n";
    	cin>>v1.zahl1;
    	cout<<"Geben sie eine weitere nummer ein\n";
    	cin>>v1.zahl2;
    	cout<<"Weahlen sie nun eine rechenart aus\n"
    		<<"1=plus(+), 2=Minus(-), 3=Mal(*) und 4=Geteilt(/)\n";
    		int wahl;
    		cin>>wahl;
    	switch(wahl)
    	{
    	case 1:
    		void plus(float v1.zahl1, float v1.zahl2);
    		break;
    	case 2:
    		void minus(float v1.zahl1, float v1.zahl2);
    		break;
    	case 3:
    		void mal(float v1.zahl1, float v1.zahl2);
    		break;
    	case 4:
    		void geteilt(float v1.zahl1, float v1.zahl1);
    		break;
    	default:
    		cout<<"Eingabe ist ungueltig\n";
    		break;
    	}
    	}
    	system("PAUSE");
    }
    

    er sagt folgendes:
    Aufgabe 2.cpp(52) : error C2143: Syntaxfehler: Es fehlt ',' vor '.'
    Aufgabe 2.cpp(55) : error C2143: Syntaxfehler: Es fehlt ',' vor '.'
    Aufgabe 2.cpp(58) : error C2143: Syntaxfehler: Es fehlt ',' vor '.'
    Aufgabe 2.cpp(61) : error C2143: Syntaxfehler: Es fehlt ',' vor '.'

    Diese zeilen sind in der switchfunktion wo ich die funktionen aufrufe.



  • ich korrigier das jetzt nur erstmal, zum inhalt sag iche rstmal nix, da ich a) deinem Buch nicht vorgreifen will, und b) andere sicher schon genug dazu sagen XD

    #include <iostream>
    using namespace std;
    
    class Taschenrechner
    {
    public:
        float zahl1;
        float zahl2;
    
        void plus(float number1, float number2)
        {
            cout<<"Ergebnis:"<<number1+number2<<"\n";
        }
    
        void minus(float number1, float number2)
        {
            cout<<"Ergebnis:"<<number1-number2<<"\n";
        }
    
        void mal(float number1, float number2)
        {
            cout<<"Ergebnis:"<<number1*number2<<"\n";
        }
    
        void geteilt(float number1, float number2)
        {
            cout<<"Ergebnis:"<<number1/number2<<"\n";
        }
    
    };
    
    int main ()
    {
        cout<<"Geben sie die anzahl der rechen durchgänge an!\n";
        int durchgang;
        cin>>durchgang;
        for(int i;i<durchgang;i++)
        {
    		Taschenrechner v1;
    		cout<<"Geben sie eine zahl ein\n";
    		cin>>v1.zahl1;
    		cout<<"Geben sie eine weitere nummer ein\n";
    		cin>>v1.zahl2;
    		cout<<"Weahlen sie nun eine rechenart aus\n"
    	    	<<"1=plus(+), 2=Minus(-), 3=Mal(*) und 4=Geteilt(/)\n";
    		int wahl;
    		cin>>wahl;
    		switch(wahl)
    		{
    		case 1:
    			v1.plus(v1.zahl1,v1.zahl2);
    			break;
    		case 2:
    			v1.minus(v1.zahl1,v1.zahl2);
    			break;
    		case 3:
    			v1.mal(v1.zahl1,v1.zahl2);
    			break;
    		case 4:
    			v1.geteilt(v1.zahl1,v1.zahl2);
    			break;
    		default:
    			cout<<"Eingabe ist ungueltig\n";
    			break;
    		}
        }
        system("PAUSE");
    }
    


  • 1.Danke für die schnelle hilfe(top ebayer hä?)
    2.Ich hab das selber mal gemacht und die gröbxten fehler beseitigt 😉
    und das ich das so schreiben muss wusste ich nicht und nochmal danke 😉

    EDIT:Kaptel Elementfunktionen(methoden) nochmal von vorne durhclesen 😉



  • hier mal eine neue version mit der rechnung im quadrat!

    #include <iostream>
    using namespace std;
    
    class Taschenrechner
    {
    public:
    	float zahl1;
    	float zahl2;
    
    void plus(float number1, float number2)
    {
    	cout<<"\nErgebnis:"<<number1+number2<<"\n";
    }
    
    void minus(float number1, float number2)
    {
    	cout<<"\nErgebnis:"<<number1-number2<<"\n";
    }
    
    void mal(float number1, float number2)
    {
    	cout<<"\nErgebnis:"<<number1*number2<<"\n";
    }
    
    void geteilt(float number1, float number2)
    {
    	cout<<"\nErgebnis:"<<number1/number2<<"\n";
    }
    
    void quadrat(float number1, float number2)
    {
    	cout<<"\nErgebnis:"<<(number1*number1)+(number2*number2)<<"\n";
    }
    
    };
    
    int main ()
    {
    	cout<<"\nGeben sie die anzahl der rechen durchgeange an!\n";
    	int durchgang;
    	cin>>durchgang;
    	for(int i=0;i<durchgang;i++)
    	{
    	Taschenrechner v1;
    	cout<<"\nGeben sie eine zahl ein\n";
    	cin>>v1.zahl1;
    	cout<<"\nGeben sie eine weitere zahl ein\n";
    	cin>>v1.zahl2;
    	cout<<"\nWeahlen sie nun eine rechenart aus\n"
    		<<"1=plus(+), 2=Minus(-), 3=Mal(*), 4=Geteilt(/) und 5=)im quadrat(²)\n";
    		int wahl;
    		cin>>wahl;
    	switch(wahl)
    	{
    	case 1:
    		v1.plus(v1.zahl1, v1.zahl2);
    		break;
    	case 2:
    		v1.minus(v1.zahl1, v1.zahl2);
    		break;
    	case 3:
    		v1.mal(v1.zahl1, v1.zahl2);
    		break;
    	case 4:
    		v1.geteilt(v1.zahl1, v1.zahl2);
    		break;
    	case 5:
    		v1.quadrat(v1.zahl1, v1.zahl2);
    		break;
    	default:
    		cout<<"\nEingabe ist ungueltig\n";
    		break;
    	}
    	}
    	system("PAUSE");
    }
    

    Ich werde das nochetwas vergrössern 😉



  • hi,

    wenn du die 2 zahlen mit denen gerechnet wird doch sowieso schon einliest wieso machst du es so kompliziert und uebergibst sie noch einmal als funktions parameter .. meine methoden koennen doch eh schon auf die zahlen zugreifen...

    so koennte man das wie folgt umschreiben

    void plus(float number1, float number2)
    {
        cout<<"\nErgebnis:"<<number1+number2<<"\n";
    }
    

    in

    void plus()
    {
        cout<<"\nErgebnis:"<<zahl1+zahl2<<"\n";
    }
    

    ausserdem wuerde ich das cout ueberhaupt aus den methoden rauslassen und das ergebnis als rueckgabe wert liefern ... so das eine methode immer nur eine aufgabe macht ... also rechnen ... also wuerd ich die funktionen so umschreiben

    float plus()
    {
        return zahl1+zahl2;
    }
    

    dann kannst du im hauptprogramm das ergebnis ausgeben mit

    cout << "ergebnis : " << v1.plus() << endl;
    

    oder so in der art

    wobei das auch irgendwie scheisse aussieht da man aus dem funktionsaufruf alleine ned sehen kann was mit was addiert wird ...

    P.S. scheiss tippfehler -.-



  • Okay gute idee wollte ja erst nur mit den paar methoden und einer klasse rumexperementieren aber danke noch mal 😉



  • Hier mal eine neue version der klasse Taschenrechner XD :

    #include <iostream>
    using namespace std;
    
    class Taschenrechner
    {
    public:
    	float zahl1;
    	float zahl2;
    
    float plus(float number1, float number2)
    {
    	return number1+number2;
    }
    
    float minus(float number1, float number2)
    {
    	return number1-number2;
    }
    
    float mal(float number1, float number2)
    {
    	return number1*number2;
    }
    
    float geteilt(float number1, float number2)
    {
    	return number1/number2;
    }
    
    float pythagoras(float number1, float number2)
    {
    	return (number1*number1)+(number2*number2);
    }
    
    };
    
    int main ()
    {
    	cout<<"\nGeben sie die anzahl der rechen durchgeange an!\n";
    	int durchgang;
    	cin>>durchgang;
    	for(int i=0;i<durchgang;i++)
    	{
    	Taschenrechner v1;
    	cout<<"\nGeben sie eine zahl ein\n";
    	cin>>v1.zahl1;
    	cout<<"\nGeben sie eine weitere zahl ein\n";
    	cin>>v1.zahl2;
    	cout<<"\nWeahlen sie nun eine rechenart aus\n"
    		<<"1->plus(+), 2->Minus(-), 3->Mal(*), 4->Geteilt(/), 5->satz des phytagoras\n";
    
    		int wahl;
    		cin>>wahl;
    	switch(wahl)
    	{
    	case 1:
    		v1.plus(v1.zahl1, v1.zahl2);
    		cout<<"\nErgebnis:"<<v1.plus(v1.zahl1, v1.zahl2)<<"\n";
    		break;
    	case 2:
    		v1.minus(v1.zahl1, v1.zahl2);
    		cout<<"\nErgebnis:"<<v1.minus(v1.zahl1, v1.zahl2)<<"\n";
    		break;
    	case 3:
    		v1.mal(v1.zahl1, v1.zahl2);
    		cout<<"\nErgebnis:"<<v1.mal(v1.zahl1, v1.zahl2)<<"\n";
    		break;
    	case 4:
    		v1.geteilt(v1.zahl1, v1.zahl2);
    		cout<<"\nErgebnis:"<<v1.geteilt(v1.zahl1, v1.zahl2)<<"\n";
    		break;
    	case 5:
    		v1.pythagoras(v1.zahl1, v1.zahl2);
    		cout<<"\nErgebnis:"<<v1.pythagoras(v1.zahl1, v1.zahl2)<<"\n";
    		break;
    	default:
    		cout<<"\nEingabe ist ungueltig\n";
    		break;
    	}
    	}
    	system("PAUSE");
    }
    

    wie immer ist kritik und idee/vorschläge erwünscht 😉



  • float pythagoras(float number1, float number2)
    {
    return (number1*number1)+(number2*number2);
    }

    Das sieht nicht nach dem Satz von Phytagoras aus.



  • Vielleicht interessiert ihn auch nur das Ergebnis als Quadratzahl ?



  • jo genau eigentlich ist der satz des phytagors ja a²+b²=c² da zahl1 und zahl2 im Quadrat berechnet werden ist das ergebnis ja dann c² und man hat den grundsatz 🙂
    aber ich werde das auch noch erweitern 😉


Anmelden zum Antworten