Frage ob man folgenden Code Optimieren kann
-
Hi wie die Frage steht ja schon oben.
#include <iostream> #include <stdio.h> using namespace std; class Person { public: string name; string vorname; char geschlecht; string strasse; string ort; string email; int geburtstag, plz, hausnummer, telprivat, telberuf, telmobil; void getname() { cout <<endl<<name <<" " <<vorname <<endl; } void getwohnort() { cout <<endl <<plz <<" " <<ort <<endl; cout <<strasse << hausnummer <<endl; } char getgeschlecht() { return geschlecht; } int getgeburtstag() { return geburtstag; } void gettel() { cout <<"\nPrivat: " <<telprivat; cout <<"\nBeruf: " <<telberuf; cout <<"\nMobil: " <<telmobil; } void setname (string newname, string newvorname) { name = newname; vorname = newvorname; } void setwohnort (string newort, string newstrasse, int newplz, int newhnummer) { plz = newplz; ort = newort; strasse = newstrasse; hausnummer = newhnummer; } void setgeschlecht(char newgeschlecht) { geschlecht = newgeschlecht; } void settelprivat(int newtel1) { telprivat = newtel1; } void settelberuf(int newtel2) { telberuf = newtel2; } void settelmobil(int newtel3) { telmobil = newtel3; } }; class kunde : public Person { private: int kundennummer, umsatz; public: kunde( char *vname, char *nname , char newgeschl , int ntel, int kundennum ) //Konstruktor!! { //Werte mit Pointer, da Arrays nicht in eine FKT übergeben werden können. name=nname; vorname=vname; geschlecht= newgeschl; telprivat=ntel; kundennummer=kundennum; } int getkn() { return kundennummer;} void setkn() {cin >> kundennummer;} void setumsatz(); int getumsatz() { return umsatz;} }; void kunde::setumsatz() { cin >> umsatz; } int main () { char vname[10]; char nname[10]; int telephon; char eingabe; char temp; kunde micha(vname , nname , eingabe , telephon , 232 ); //Hat den selben namen wie Konst. cout <<"\nName?\n"; cin >> nname; cout<<"\nVorname?\n"; cin >> vname; cout << "\nGeben sie ihr Geschlecht ein"<<endl; while( true ) { cin >> eingabe; if ( eingabe == 'm' || eingabe == 'w') { break; } else { cout <<"\nUngueltige Eingabe! Eingabe wiederholen!\n"; } } micha.setgeschlecht( eingabe ); micha.setname(vname, nname); cout <<"\ntel?\n"<<endl; cin >> telephon; cout <<"\nGeben sie den Verdienten Umsatz ein"<<endl; micha.setumsatz(); cout <<"\nGeben sie die Kundennummer ein"<<endl; micha.setkn(); cout << "Möchten sie Die Daten ausgegeben haben?"<<endl; cin >> temp; if (temp == 'j') { cout <<"\nAusgabe der Daten"<<endl; cout <<"------------------"<<endl; cout <<"Name: "; micha.getname(); cout <<"\nKundennummer: " << micha.getkn()<<endl; cout <<"Geschlecht: "<< micha.getgeschlecht()<<endl; cout <<"Verdienter Umsatz: "<<micha.getumsatz()<<" Euro"<<endl; } }
also das ist er, auch wenn manche methoden nicht verwendet werden. Sollen diese bleiben, da folgende übungsaufgaben auf diese Aufbauen.
-
Also als erstes... ich hab die Hausnummer 19a ...so und nun?
Hab immo zwar keine Zeit es mir genau an zu schauen aber was mir noch einfällt ist das du im ctor wenn möglich immer die inizialisierungs liste benutzen solltest
also z.B.
kunde( char *vname, char *nname , char newgeschl , int ntel, int kundennum) :kundennummer(kundennum){...};und vielleicht schön wäre es dann noch wenn du in der Personen Klasse nen ctor hättest der dir auch die Werte so inizialisiert...den du dann aber natürlich im kunde ctor ausrufen musst...also z.B.
:Person(vname,nname,newgeschl,ntel),kundennummer(kundennum){};Achso und was mir grade noch auffiel...mach die ganzen get Methoden const.Das sollte man ja immer machen wenn möglich. Also z.B. void getname()const
Hm...das mit den geburtstag und tel nummern ist auch so ne sache... abgesehen davon das sie unsigned sind
hört sich das mitn int trotzdem sehr knapp an...und wie willste beim Geburstag unterscheiden obs nun der 21.2.1980 ist oder der 2.12.1980? denn ins int könntest du ja nur 2121980 schreiben...also entweder seperat machen oder als long mit den ganzen punken oder vielleicht gar als string
-
Ok, dazu kann ich auch mal was sagen
Ich sag jetzt mal, was mich stört und wieso.
Also 1. habe ich gelernt, dass cin oder cout nichts in den Setern und Getern zu suchen hat. Bei SetXYZ übergibt man die Parameter und bei GetXYZ kriegt man das als Rückgabewert.
Warum rufst du erst den Konstruktor von kunde micha auf um ihm leere Variablen mitzugeben und rufst dann nochmal die Seter auf? Einfacher wäre es erstmal die ganzen lokalen Variablen zu füllen und das ganze dann direkt dem Konstrutktor zu übergeben. Alternativ kann man auch einen Standard Konstruktor schreiben, der keine Parameter bekommt und noch einen der alles übergeben bekommt.
Das sind die Dinge die den Code für mich unschön machen. (Zumindest beim ersten drübergucken ;))
-
Jo thx erstmal für die Infos, ich werde sie dann gleich mal umsetzen. Genau solche tips wollte ich haben thx.