Implementierung c++



  • Habe ich hier bei dieser Übungsaufgabe richtig implementiert?

    get und setter habe ich noch nicht . Aber sind die Implementierungen soweit ok?

    #ifndef CPARKINGLOT_H_
    #define CPARKINGLOT_H_
    #include<iostream>
    using namespace std;
    
    class CParkingLot{
    private:
    	int m_id;
    	int m_capacity;
    	int m_curOccupancy = 0;
    	void generateId();
    
    public:
    CParkingLot(int capacity = 80);
    
    int getId();
    int getCapacity();
    void setCapacity(int capacity);
    int getCurOccupancy();
    void setCurOccupancy(int curOccupancy);
    bool parkVehicle();
    int parkVehicles(int numVehicles);
    int getFreeSpots();
    void print();
    friend ostream& operator<< (ostream& lop,const CParkingLot& rop);
    
    
    };
    ostream& operator<< (ostream& lop,const CParkingLot& rop);
    
    
    #endif /* CPARKINGLOT_H_ */
    
    
    
    
    #include <iostream>
    #include <exception>
    #include "CParkingLot.h"
    using namespace std;
    
    int m_id;
    
    void generateId()
    {
    	static int id = 100;
    
    	if (id >= 100 && id <= 1000)
    	{
    		m_id = id;
    		id++;
    	}
    	else
    	{
    		throw std::runtime_error("too many ids");
    	}
    }
    
    CParkingLot::CParkingLot(int capacity ){
    
    	if(m_capacity <= 200 ){
    
    		m_capacity = capacity;
        }
    	else{
    		int capacity = 80;
    	}
    	generateId();
    }
    
    bool CParkingLot::parkVehicle(){
    	
    	if (m_curOccupancy < m_capacity){
    		
    		int vehicle = 0;
    		vehicle++;
    		return true;
    	}
    	
    	if( m_curOccupancy == m_capacity   ){
    		return false;
    	}
    	
    }
    
    int CParkingLot::parkVehicles(int numVehicles){
    	if (m_curOccupancy < m_capacity){
    			
    			return null;
    		}
    		
    		if( m_curOccupancy == m_capacity   ){
    			return numVehicles;
    		}
    		
    	}
    	
    	
    
    
    
    

    https://picload.org/view/dccwdwdc/bildschirmfoto2019-01-06um15.5.png.html



  • Nein.

    Schalte die Warnungen deines Compilers ein.

    Teste das Programm.



  • Mir wird nur bei dem null ein Fehler angezeigt ?
    Mehr nicht .
    Nutze Eclipse .
    Soll ich return 0; schreiben ?
    Aber das zeigt auch Fehler 🙂



  • return 0; hätte schon gepasst. Wahrscheinlich macht dich dein Compiler darauf aufmerksam, daß nicht alle Pfade einen Wert zurückgeben.

    Wenn du deinen beitrag bearbeiten würdest, deinen Code ordentlich einrückst und die Aufgabenstellung als Text postest anstatt einem Link auf ein Bild, würden es sich vielleicht mehr Leute ansehen.



  • Stimmt mit return 0; zeigt die Ide keine Fehler mehr an 🙂

    Ist die d) und e ) richtig implementiert ?
    Da hatte ich so meine Schwierigkeiten .
    Wir behandeln nur Grundlagen .
    Studiere auch nicht Informatik.



  • @Programmer33 sagte in Implementierung c++:

    Ist die d) und e ) richtig implementiert ?

    Keine Ahnung. Ich klicke nicht auf Links zu irgendwelchen Bildern.



  • verstehe nicht warum du keine Fehler bekommst, denn getId() ist in der Klasse CParkingLot definiert aber dann als einfache Funktion im cpp File. CParkingLot::parkVehicle() zählst du irgendwie nicht das abgestellte Fahrzeug in deiner CParkingLot Klasse hoch, also das deine Code irgendwie Funktioniert und das macht was du willst, so sieht das mir nicht aus. Zum Schluss noch warum du m_id in der Klasse CParkingLot definierst und dann noch mal als globale variable, ist auch fraglich.

    Aber vielleicht hab ich nur was übersehen und das läuft bei dir ja doch alles Prima 😳

    Gruß und viel Glück



  • Erstellen Sie zunächst die Dateien CParkingLot.h und CParkingLot.cpp und deklarieren Sie (6) die Klasse CParkingLot gemäß dem oben abgebildeten Klassendiagramm. Implementieren Sie die deklarierten Getter- und Setter-Methoden.
    Implementieren Sie die private Methode void generateId(), die dem Attribut m_id der (3) CParkingLot-Objekte einen eindeutigen Wert im angegebenen Wertebereich zuweist. Nutzen Sie
    hierfür eine lokale static-Variable innerhalb dieser Methode, die Sie nach jeder Zuweisung inkrementieren.
    Implementieren Sie den Konstruktor der Klasse CParkingLot. Beachten Sie dabei die Zusicherungen und nutzen Sie den Defaultwert auch, falls der Parameter nicht im Wertebereich von m_capacity
    liegt. Zur Initialisierung von m_id rufen Sie im Konstruktor die Methode generateId() aus Aufgabe
    b) auf.
    c)Implementieren Sie die Methode bool parkVehicle(), die dem Parkplatz genau ein Fahrzeug hinzufügt. Als Rückgabewert soll true zurückgegeben werden, falls für das Fahrzeug noch ein Stellplatz vorhanden ist; es wird false zurückgegeben, falls der Parkplatz bereits voll ist.
    d)Implementieren Sie die Methode int parkVehicles(int numVehicles), die dem Parkplatz mehrere Fahrzeuge hinzufügt. Als Rückgabewert soll der Wert 0 zurückgegeben werden, falls für alle Fahrzeuge noch Stellplätze vorhanden sind; falls der Parkplatz bereits voll ist bzw. wird, wird die Anzahl
    der Fahrzeuge zurückgegeben, für die kein Stellplatz mehr verfügbar ist.
    Implementieren Sie die Methode int getFreeSpots(), die die Zahl der freien Stellplätze zurückgibt.
    Implementieren Sie die Methode float getFreeCapacity(), die den Prozentsatz der freien Stellplätze zurückgibt.

    Besser ?

    Sind die Methoden bool parkVehicle, und parkVehicles richtig?



  • Also bei mir zeigt die Ide keine Fehler an .
    Hier ein Screenshot von Ide .
    Daher bin ich bei Fehlern bei der Implementierung auf eure Hilfe ein wenig angewiesen.

    ?
    https://picload.org/view/dcigpdpc/bildschirmfoto2019-01-06um17.0.png.html

    dieser ** Fehler geht immer später weg wenn ich main usw gemacht habe.

    Alles ok?



  • @Programmer33 sagte in Implementierung c++:

    Sind die Methoden bool parkVehicle, und parkVehicles richtig?

    Nein, in CParkingLot::parkVehicle() veränderst du bloß eine lokale Variable vehicle. Diese Variable ist weg wenn die Funktion zum Aufrufer zurückkehrt. An der CParkingLot-Instanz ändert sich nichts.

    Das erste if in CParkingLot::parkVehicles() kann nicht passen, weil m_curOccupancy < m_capacity nur darüber aussagt, ob es überhaupt noch freie Plätze gibt. Daraus lässt sich nicht schließen, daß alle numVehicles geparkt werden können. Interessant wäre viel mehr die Anzahl der Freien Plätze m_capacity - m_curOccupancy.

    Das zweite if in CParkingLot::parkVehicles() sieht gut aus, sollte aber das allererste sein, daß die Funktion tut.

    Andere Fälle fehlen.

    @Programmer33 sagte in Implementierung c++:

    dieser ** Fehler geht immer später weg wenn ich main usw gemacht habe.

    Huh!? Mach mal "main usw" und teste deine Klasse.



  • Swordfish ist es jetzt so besser ?

    Fehler werden keine angezeigt ,aber ob es so richtig implementiert ist 🙂

    
    #ifndef CPARKINGLOT_H_
    #define CPARKINGLOT_H_
    #include<iostream>
    using namespace std;
    
    class CParkingLot{
    private:
    	int m_id;
    	int m_capacity;
    	int m_curOccupancy = 0;
    	void generateId();
    
    public:
    CParkingLot(int capacity = 80);
    
    int getId();
    int getCapacity();
    void setCapacity(int capacity);
    int getCurOccupancy();
    void setCurOccupancy(int curOccupancy);
    bool parkVehicle(int vehicles = 0);
    int parkVehicles(int numVehicles);
    int getFreeSpots();
    void print();
    friend ostream& operator<< (ostream& lop,const CParkingLot& rop);
    
    
    };
    ostream& operator<< (ostream& lop,const CParkingLot& rop);
    
    
    #endif /* CPARKINGLOT_H_ */
    

    cpp

    #include <iostream>
    #include <exception>
    #include "CParkingLot.h"
    using namespace std;
    
    int m_id;
    
    void generateId()
    {
    	static int id = 100;
    
    	if (id >= 100 && id <= 1000)
    	{
    		m_id = id;
    		id++;
    	}
    	else
    	{
    		throw std::runtime_error("too many ids");
    	}
    }
    
    CParkingLot::CParkingLot(int capacity ){
    
    	if(m_capacity <= 200 ){
    
    		m_capacity = capacity;
        }
    	else{
    		int capacity = 80;
    	}
    	generateId();
    }
    
    bool CParkingLot::parkVehicle(int vehicles){
    
    	if( m_curOccupancy == m_capacity   ){
    		return false;
    	}
    	if ( m_curOccupancy < m_capacity){
    
    
    			vehicles++;
    			return true;
    		}
    
    
    }
    
    int CParkingLot::parkVehicles(int numVehicles){
    	if (m_capacity -m_curOccupancy < m_capacity){
    
    			return 0;
    		}
    
    		if( m_curOccupancy == m_capacity   ){
    			return numVehicles;
    		}
    
    	}
    
    
    
    
    
    

    Ist es so mit der Variable vehicles besser gelöst ?



  • @Programmer33 sagte in Implementierung c++:

    Ist es so mit der Variable vehicles besser gelöst ?

    Jetzt veränderst du den übergebenen Parameter. Auch der ist weg wenn die Funktion zurückkehrt. Ich schätze, du solltest m_curOccupancy inkrementieren.

    Was soll die globale Variable m_id?

    @Swordfish sagte in Implementierung c++:

    @Programmer33 sagte in Implementierung c++:

    dieser ** Fehler geht immer später weg wenn ich main usw gemacht habe.

    Huh!? Mach mal "main usw" und teste deine Klasse.



  • das m_id sollte ich nach der Aufgabe im in der Methode als lokale static Variable setzen .

    Meinst du das ich dann in der methode einfach :

    m_curOccupancy++; machen soll?
    In der AUfgabe steht doch das man ein Fahrzeug hinzufügen soll?

    m_curOccupancy ist doch anzahl freier Parkplätze oder nicht ?
    Kannst du mir das erklären warum das so dann sein soll? 🙂
    Ich muss es ja auch verstehen



  • @Programmer33 sagte in Implementierung c++:

    Implementieren Sie die private Methode void generateId(), die dem Attribut m_id der (3) CParkingLot-Objekte einen eindeutigen Wert im angegebenen Wertebereich zuweist. Nutzen Sie hierfür eine lokale static-Variable innerhalb dieser Methode, die Sie nach jeder Zuweisung inkrementieren.

    Also soll m_id ein Member von CParkingLot sein und generateId() eine Methode: void CParkingLot::generateId(). Bei dir ist es eine freie Funktion die nicht teil einer Klasse ist.

    @Programmer33 sagte in Implementierung c++:

    m_curOccupancy ist doch anzahl freier Parkplätze oder nicht?

    Meaning of “occupancy” in the English Dictionary:

    the number of things, such as rooms, that are being used, in relation to the total number available:

    Also wohl eher die Anzahl der belegten Parkplätze.



  • Wie oft willst du diese Aufgabe eingentlich noch nicht schaffen?

    https://www.c-plusplus.net/forum/topic/348478/inkrementieren-problem



  • oh anscheinend hatte jemand die gleiche Aufgabe 🙂

    Mein Code sieht jetzt so aus Leute

    
    #include <iostream>
    #include <exception>
    #include "CParkingLot.h"
    using namespace std;
    
    int m_id;
    
    void generateId()
    {
    	static int id = 100;
    
    	if (id >= 100 && id <= 1000)
    	{
    		m_id = id;
    		id++;
    	}
    	else
    	{
    		throw std::runtime_error("too many ids");
    	}
    }
    
    CParkingLot::CParkingLot(int capacity ){
    
    	if(m_capacity <= 200 ){
    
    		m_capacity = capacity;
        }
    	else{
    		int capacity = 80;
    	}
    	generateId();
    }
    
    bool CParkingLot::parkVehicle(){
    
    	if( m_curOccupancy == m_capacity   ){
    		return false;
    	}
    	if ( m_curOccupancy < m_capacity){
    
    
    			m_curOccupancy++;
    			return true;
    		}
    
    
    }
    
    int CParkingLot::parkVehicles(int numVehicles){
    	if (m_capacity -m_curOccupancy < m_capacity){
    
    			return 0;
    		}
    
    		if( m_curOccupancy == m_capacity   ){
    			return numVehicles;
    		}
    
    	}
    
    int CParkingLot::getFreeSpots(){
    
    	return m_freeSpots;
    }
    
    int CParkingLot::getCapacity(){
    	return m_capacity;
    
    	}
    
    int CParkingLot::getCurOccupancy(){
    	return m_curOccupancy;
    
    }
    
    void CParkingLot::setCurOccupancy(int curOccupancy){
    	m_curOccupancy = curOccupancy;
    }
    
    void CParkingLot::setCapacity(int capacity){
    	m_capacity = capacity;
    }
    
    

    Alles Top?



  • @Programmer33 sagte in Implementierung c++:

    oh anscheinend hatte jemand die gleiche Aufgabe

    Wen willst du hier verarschen, Master33Programmer33?
    Dein generateId() ist 1:1 von @Th69 aus diesem Beitrag (https://ideone.com/r9Unqx) übernommen. Einfach abschreiben ohne Hirn hat schon vor 2 Monaten nicht funktioniert. Heute ist es nicht anders.

    Ich bin hier raus.



  • Ich hatte es durch googeln von der Seite .Und habe es daher übernommen .



  • Falls jemand mal probleme mit der Aufgabe haben sollte .

    Hier meine Lösung soweit :

    #include <iostream>
    #include <exception>
    #include "CParkingLot.h"
    using namespace std;
    
    int m_id;
    
    void generateId()
    {
    	static int id = 100;
    
    	if (id >= 100 && id <= 1000)
    	{
    		m_id = id;
    		id++;
    	}
    	else
    	{
    		throw std::runtime_error("too many ids");
    	}
    }
    
    CParkingLot::CParkingLot(int capacity ){
    
    	if(m_capacity <= 200 ){
    
    		m_capacity = capacity;
        }
    	else{
    		int capacity = 80;
    	}
    	generateId();
    }
    
    bool CParkingLot::parkVehicle(){
    
    	if( m_curOccupancy == m_capacity   ){
    		return false;
    	}
    	if ( m_curOccupancy < m_capacity){
    
    
    			m_curOccupancy++;
    			return true;
    		}
    
    
    }
    
    int CParkingLot::parkVehicles(int numVehicles){
    	if (m_capacity -m_curOccupancy < m_capacity){
    
    			return 0;
    		}
    
    		if( m_curOccupancy == m_capacity   ){
    			return numVehicles;
    		}
    
    	}
    
    int CParkingLot::getFreeSpots(){
    
    	return m_freeSpots;
    }
    
    int CParkingLot::getCapacity(){
    	return m_capacity;
    
    	}
    
    int CParkingLot::getCurOccupancy(){
    	return m_curOccupancy;
    
    }
    
    void CParkingLot::setCurOccupancy(int curOccupancy){
    	m_curOccupancy = curOccupancy;
    }
    
    void CParkingLot::setCapacity(int capacity){
    	m_capacity = capacity;
    }
    
    ostream& operator<< (ostream& lop,const CParkingLot& rop){
      lop << "ID:" << "" << rop.m_id << "" << "Kapazität:" << "" << rop.m_capacity << "" << "frei:" << rop.m_freeSpots << endl;
    
     return lop;
    }
    
    void CParkingLot::print(){
    	cout << " Der Parkplatz hat folgende Eigenschaften :" << endl;
    	cout << "ID:" << "" << m_id << "" << "Kapazität:" << "" << m_capacity << "" << "frei:" << m_freeSpots << endl;
    
    }
    
    
    
    
    
    

    Was sagen die Experten hier ?



  • @Programmer33 sagte in Implementierung c++:

    Falls jemand mal probleme mit der Aufgabe haben sollte

    lieber selber denken statt so einen Schrott zu kopieren.