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.00000

    dann 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.00000

    dann 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 😃


Anmelden zum Antworten