Initialisierungsliste eine Konstruktors
-
Hi :xmas1:
ich bin grade in der Prüfungsvorbereitungszeit angelangt und absolviere in 2 Wochen meine Gesellenprüfung (Elektroniker für Maschinen- und Antriebstechnik). Damit mir das Üben nicht zu langweilig wird, dachte ich mir, ich programmiere für meine Klasse und mich ein Programm, welches alle Daten für uns ausrechnet und uns unter anderem sagt, ob der angegebene Motor in Stern oder in Dreieck geschaltet werden soll. Hier kommt das Problem. Meine Klassenmethode isDreieck() gibt true oder false zurück (wenn true, dann kann der Motor in Dreieck betrieben werden).bool AsynchMotor::isDreieck() const { if(spannungStern < spannungDreieck) return true; else return false; }Ich rufe die Methode erstmals in dem Konstruktor der Klasse AsynchMotor auf, um die Berechnung korrekt durchzuführen.
class AsynchMotor { public: AsynchMotor(float c, float p, float uD, float uS, float i, float n); float getScheinleistung() const; float getBlindleistung() const; float getWirkleistung() const; float getLeistungsfaktor() const; bool isDreieck() const; private: // Nenndaten des Motors float cosPhi; // cos Phi float etha; float leistung; // Abgegebene Leistung float spannungStern, spannungDreieck; // Betriebsspannung float strom; // Nennstrom float drehzahl; // Nenndrehzahl float sLeistung, bLeistung, wLeistung; };AsynchMotor::AsynchMotor(float c, float p, float uD, float uS, float i, float n) : cosPhi(c), leistung(p), spannungStern(uS), spannungDreieck(uD), strom(i), drehzahl(n) { float spannung = isDreieck() ? spannungDreieck : spannungStern; sLeistung = spannung * strom * sqrt(3.0f); wLeistung = sLeistung * cosPhi; bLeistung = sqrt((sLeistung * sLeistung) - (wLeistung * wLeistung)); etha = leistung / wLeistung; }Mein Aufruf in der Mainfunktion:
int main() { AsynchMotor motor1(0.81f, 3000.0f, 230.0f, 400.0f, 6.5f, 1420.0f); std::cout << motor1.getScheinleistung << std::endl // falsches Ergebnis (hier wurde mit 400V gerechnet. Richtig wäre eine Rechnung mit 230V) << motor1.isDreieck(); // hier wird das Ergebnis korrekt angezeigt _getch(); return 0; }Wieso ist das Ergebnis im Konstruktor immer true?
-
debugge doch mal Schritt für Schritt
-
Hab ich getan.
spannungDreieck = 230.00000
spannungStern = 400.00000dann müsste die Methode doch bei
if(spannungStern < spannungDreieck) return true; else return false;false zurückgeben, was sie nicht tut!
-
Edit: Käse
-
Ini-List schrieb:
Hab ich getan.
spannungDreieck = 230.00000
spannungStern = 400.00000dann müsste die Methode doch bei
if(spannungStern < spannungDreieck) return true; else return false;false zurückgeben, was sie nicht tut!
Oh damn. Hab wohl zu lange geübt

float spannung = isDreieck() ? spannungStern : spannungDreieck;Ups
