enum im konstruktor bzw. in == operator verpacken
-
wie baue ich eine eunm in einem konsturktor ein?
enum art {Angestellter, Arbeiter, Beamter}; art welcheArt; ... Pension (char* nameP, int svnrP, double betragP); //konstruktor bis jetzt. //hier soll die art noch irgendwie reinkommen
dann soll noch ein == operator überladen werden...wie das geht is mir klar, aber weiß nurn icht, wie ich auf gleiche Art (enum) überprüfe. eine pension ist nur dann gleich wenn art und betrag gleich sind. wie ich den betrag vergleich ist mir klar..aber bei der enum tu ich mir schwer.
-
probier's so:
typedef enum art {Angestellter, Arbeiter, Beamter} ART; Pension (char* nameP, int svnrP, double betragP, ART art);
-
irgendwie funkt das nicht wirklich...hmmm...
-
ich glaub ich versteh dein Problem nicht... du kannst ein enum genauso vergleichen bzw. genauso als Parameter uebergeben wie einen int:
enum art {Angestellter, Arbeiter, Beamter}; bool testfunktion(art a, art b) // enums koennen normal in Funktionen uebergeben werden { return a == b; // enums werden normal mit == auf Gleichheit getestet } int main() { art foo = Angestellter; art bar = Beamter; cout << testfunktion(foo, Angestellter) << endl; // gibt true cout << testfunktion(foo, bar) << endl; // gibt false return 0; }
-
das war meine == operator überladung bis vor kurzem:
bool Pension::operator==(const Pension& p2) const if((name==p2.name) && (svnr==p2.svnr) && (betrag == p2.betrag)) return(true); return(false);
nur hab ich hier die überprüfung auf die selbe Art nicht dabei und weiß nicht, wie ich die am besten reinstopfe...Eine Pension ist nur dann gleich, wenn betrag und enben die Art gleich sind...
-
2 Tipps
1. implementiere Operator == ausserhalb der Klasse
2. wenn du schon boolsche Logik verwendest, dann nutze sie auchHier mal mein Vorschlag (vorausgesetzt dein Member heisst art)
bool operator ==(const Pension& lhs, const Pension& rhs) { return (lhs.name == rhs.name) && (lhs.svnr == rhs.svnr) && (lhs.betrag == rhs.betrag) && (lhs.art == rhs.art); }
Und noch ein
friend bool operator ==(const Pension& lhs, const Pension& rhs);
in die Klasse, falls du auf non-public Member zugreifst.
-
schaut bei mir jetzt so aus...
bool Pension::operator==(const Pension& p2) { if((name==p2.name) && (svnr==p2.svnr) && (betrag == p2.betrag) && (art==p2.art)) return true; return false; }
nur krieg ich immer wieder die fehlermeldung: "parse error bevore =="
Eigentlich muss ich ja nur den betrag und die art vergleichen...muss ich da
immer wieder die ganze Wurst angeben? weil sonst spinnt er wieder, dass erst nicht kenn...wie kann man das lösen?
-
Was zur Hölle willst du? Ich programmier nicht mit Würsten und kann deshalb auch nicht ganz nachvollziehen, was du da machst.
[EDIT] Und beherzige groovemasters Vorschläge.
-
VitoC schrieb:
Eigentlich muss ich ja nur den betrag und die art vergleichen...muss ich da
immer wieder die ganze Wurst angeben?Woher sollen wir das wissen?
Wenn betrag und art ausreicht, dann brauchst du auch nur diese beiden Member zu vergleichen.
-
VitoC schrieb:
Eigentlich muss ich ja nur den betrag und die art vergleichen...muss ich da
immer wieder die ganze Wurst angeben?Nein.
Bye, TGGC Deine Unterstützung wird gebraucht!
-
VitoC schrieb:
nur krieg ich immer wieder die fehlermeldung: "parse error bevore =="
Eigentlich muss ich ja nur den betrag und die art vergleichen...muss ich da
immer wieder die ganze Wurst angeben? weil sonst spinnt er wieder, dass erst nicht kenn...wie kann man das lösen?Vielleicht hilft dir google weiter.
Zu deinem Programmierproblem: das mit Betrag und Art stimmt, du hast dir einen Logikfehler eingebaut. Wenn du allen relevanten Code postest kann man dir evtl. zumindest mit deinen C++-Fehlern weiterhelfen.
Und falls du tatsächlich ein char name* in deiner Klasse stehen hast - schau dir strcmp oder std::string (besser) an.