C++ oop aufzug programmierung



  • hallo ich bin gerade dabei c++ oop zu lernen und habe eine Aufgabe bekomme in dem ich einen sehr abstrakten Aufzug programmieren soll.

    folgende Methoden sind gegeben:

     void oberstesStockwerk(int stockwerk): teilt dem Aufzug die Nummer des obersten Stockwerks des Gebaudes mit.
     void reset(): bewegt den Aufzug in das unterste Stockwerk.
     void auf(): bewegt den Aufzug um ein Stockwerk nach oben
     void ab() : bewegt den Aufzug um ein Stockwerk nach unten
     int stockwerk(): liefert die Nummer des Stockwerks, in dem sich der Aufzug gerade befindet.

    Bei Tests hat alles geklappt nur wenn ich den aufzug um ein Stockwerk nach unten fahren lassen will schließt sich meine Anwendung einfach. 😡 Ich verstehe einfach nicht warum. Dazu muss ich noch sagen dass der Aufzug nicht in den Keller fahren kann. 😕 😡 Kann mir irgendjemand weiterhelfen?
    Außerdem bin ich für jede Codeverbesserung offen 😃 Vielen lieben Dank an alle die sich mir annehmen 😃

    mein code schaut foglendermaßen aus:

    Aufzug.h:

    #pragma once
    class Aufzug
    {
    public:
    
    	int ioberstesStockwerk;
    	int aktuellesstockwerk=0;
    	void oberstesStockwerk(int stockwerk);
    	void reset();
    	void auf();
    	void ab();
    	int stockwerk();
    };
    

    Aufzug.cpp

    #include "stdafx.h"
    #include "Aufzug.h"
    #include <iostream>
    using namespace std;
    
    void Aufzug::ab(){
    	if (aktuellesstockwerk > 0)
    	{
    	aktuellesstockwerk -= 1;
    	}
    
    }
    
    void Aufzug::auf(){
    	if (aktuellesstockwerk < ioberstesStockwerk)
    	{
    		aktuellesstockwerk += 1;
    	}
    
    }
    
    void Aufzug::reset(){
    	aktuellesstockwerk = 0;
    }
    
    void Aufzug::oberstesStockwerk(int stockwerk)
    {
    ioberstesStockwerk = stockwerk;
    }
    
    int Aufzug::stockwerk(){
    	return aktuellesstockwerk;
    }
    

    main.cpp

    #include "stdafx.h"
    #include "Aufzug.h"
    #include <iostream>
    using namespace std;
    
    int main()
    {
    	bool aussteigen = false;
    	int x;
    	char c;
    	cout << "Welche Nummer hat das oberste Stockwerk?" << endl;
    
    	cin >> x;
    	Aufzug A;
    	A.oberstesStockwerk(x);
    	while (aussteigen  == false )
    	{
    		cout << "Wohin wollen Sie ? [auf = ^, ab = v, aussteigen = x]" << endl;
    		cin >> c;
    		switch (c)
    		{
    			case 'v':
    				A.ab();
    			case 'x':
    				aussteigen = true;
    			case '^':
    				A.auf();
    
    		}
    		cout << "aktuelles Stockwerk:" << A.stockwerk() << endl;
    	}
    	cout << "aktuelles Stockwerk:" << A.stockwerk() << endl;
    
    }
    


  • Du hast die breaks bei deinen switch-cases vergessen.

    switch (c)
    {
    case 'v':
        A.ab();
        break;
    case 'x':
        aussteigen = true;
        break;
    case '^':
        A.auf();
        break; 
    }
    


  • Drei Sachen sind mir aufgefallen:

    * Dein Fahrstuhl kann nicht in das oberste Stockwerk fahren
    * Du sagst zwar, dass dein Fahrstuhl nicht in den Keller fahren kann, erlaubst aber ein negatives maximales Stockwerk?
    * Beim Reset könntest du den Fahrstuhl solange nach unten fahren lassen, bis er angekommen ist. Macht in diesem Beispiel vermutlich keinen nennenswerten Unterschied, ist aber näher an der Realität 😉



  • vielen Dank Singender Holzkübel!! 👍 👍 wie konnt ich das nur übersehen 😕

    zu daddy_felix :
    1. Dein Fahrstuhl kann nicht in das oberste Stockwerk fahren

    Mein Fahrstuhl soll immer nur ein Stockwerk nach oben fahren können 😃 oder versteh ich dich gerade falsch? 😉

    2. Du sagst zwar, dass dein Fahrstuhl nicht in den Keller fahren kann, erlaubst aber ein negatives maximales Stockwerk?

    stimmt ist mir nicht aufgefallen danke ❤

    3.Beim Reset könntest du den Fahrstuhl solange nach unten fahren lassen, bis er angekommen ist. Macht in diesem Beispiel vermutlich keinen nennenswerten Unterschied, ist aber näher an der Realität 😉

    hab ich mal übernommen 😃 ist ja nur ne kleine schleife 😃

    nochmal danke an euch 2 ❤ 👍



  • andymaxi schrieb:

    1. Dein Fahrstuhl kann nicht in das oberste Stockwerk fahren

    Mein Fahrstuhl soll immer nur ein Stockwerk nach oben fahren können 😃 oder versteh ich dich gerade falsch? 😉

    quatsch, geht doch. Sorry 😉



  • dein void oberstesStockwerk(int stockwerk); ist Quatsch

    oberstes_stockwerk ist ein Konstruktor-Parameter - es macht keinen Sinn das dein Fahrstuhl seine Hardwarefähigkeit zur Laufzeit veraendert - und wenn musst du deine Logik anpassen - was passiert wenn du in Stockerwerk 6 stehst und dann oberstesStockwerk(3) aufrufst - relativ sinnlos

    also eher

    class Aufzug
    {
    public:
      int oberstes_stockwerk;
    
      Aufzug(const int& p_oberstes_stockwerk):
    oberstes_stockwerk(p_oberstes_stockerwerk),
    aktuelles_stockwerk(0)
    {
    }
    //...
    }
    

    und die Methode oberstesStockwerk ganz raus - intialisiert wird über den Konstruktor - nicht per Methoden dein Objekt "nachinitialisieren"



  • int als const& zu übergeben, ist aber auch ziemlicher Quatsch



  • ich mache es aus Gewohnheit weil ich dann bei Refactoring auf andere Typen, Template usw. nicht drauf achten muss - ob der Typ jetzt groesser kleiner geworden ist - und const int& wird vom Compiler in ein Copy-By-Value umgewandelt - und Lesbarkeit ist auch nur Gewohnheit



  • also ich hab mal alles umgesetzt was ich mir so geraten habt und es funktioniert wunderbar 😃 👍 👍 👍 👍
    DANKE!!



  • wir wollen sehen


Anmelden zum Antworten