[Anfänger] const int erhöhen



  • Hallo,
    ich habe folgendes Problem, ich soll eine Klasse Flugzeug implementieren, wobei der header vorgegeben ist, nr soll bei jedem erstellten Objekt eindeutig sein. Meine Idee war es nr bei jedem erstellen um 1 zu erhöhen, ist aber als const und nicht als static vorgegeben, somit bin ich nach vielen versuchen ratlos und hoffe ihr könnt mir helfen.

    //header mit betreffenden teilen
    class Flugzeug{
    private:
        const unsigned int nr;
    
    public:
        Flugzeug(const char *typ, unsigned int sitze);
    
        unsigned int getNr() const;
    };
    
    //was ich bisher diesbezüglich programmiert habe
     Flugzeug::Flugzeug(const char *typ, unsigned int sitze) : nr(),sitze(sitze) {
            Flugzeug::typ = const_cast<char *>(typ);
        }
    
      unsigned int Flugzeug::getNr() const{
            return nr;
        }
    


  • Warum ist "nr" eigentlich "const", wenn es eigentlich eine Eigenschaft des Flugzeugs ist? Das Leuchtet mir nicht wirklich ein. Bist du sicher, dass "nr" weiterhin "const" bleiben muss?



  • Soweit ich es verstanden habe darf ich nichts dadran ändern,
    aber hier die genaue Aufgabenstellung.



  • @It0101

    und wenn sich die Nummer nie ändert?

    @Behamot

    Ich finde es komisch das die Nr nicht Teil der Ctor-Parameter ist



  • Die Idee mit dem static ist doch gut, nur darfst du natürlich nicht nr statisch machen, es haben ja nicht alle existierenden Flugzeuge die gleiche Nummer. Führe eine weitere statische Variable ein und übernimm deren Wert jeweils im Konstruktor für nr.
    In der Aufgabenstellung gibt es serienNr, ohne dass genau beschrieben wird, was das sein soll. Vielleicht ist das genau diese Variable.



  • @Bashar
    Auf den nächsten seiten ist platz für die Implementierung, da steht zur SerienNr das man den wert mit 4700 initialisieren soll, bevor man in den Konstruktor geht.

    Führe eine weitere statische Variable ein und übernimm deren Wert jeweils im Konstruktor für nr.

    Meinst du ich soll im im header eine zusätzliche statische variable ergänzen?



  • Ja. Fakt ist, dass du im Konstruktor laut Aufgabe nr mit dem um 1 erhöhten Wert der nr der vorher erstellten Instanz initialisieren musst. Du hast aber ohne weiteres keine Zugriff auf diesen Wert oder diese Instanz. Eine statische Variable würde dem abhelfen und wäre auch das übliche Mittel für derartiges.

    Ich vermute, dass du die Variable nicht hinzufügen musst, sondern dass es sie schon gibt, und dass sie serienNr heißt. (Was dagegen spräche ist allerdings dass eine signed und eine unsigned ist 🤔 )

    Was anderes: Das mit dem const_cast ist falsch. Du kannst nicht davon ausgehen, dass der übergebene Zeiger effektiv auf etwas nichtkonstantes zeigt, und es ist sehr leicht, hier ein von der Aufgabenstellung erlaubtes Szenario zu konstruieren, bei dem dir alles um die Ohren fliegt.



  • Ohne Allokationen o.Ä. wäre es ziemlich sinnfrei der Klasse einen Destruktor zu verpassen. Ich gehe also davon aus dass der übergebene Typstring kopiert werden soll - und dann natürlich dementsprechend auch im Destruktor wieder freigegeben. Und im Assignment-Operator muss man sich natürlich auch darum kümmern.
    Das löst dann auch gleich das Problem mit dem const - es muss dann nix mehr gecastet werden.


Anmelden zum Antworten