[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.
-
und wenn sich die Nummer nie ändert?
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 nichtnr
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ürnr
.
In der Aufgabenstellung gibt esserienNr
, 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 zurSerienNr
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 dernr
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 einesigned
und eineunsigned
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 demconst
- es muss dann nix mehr gecastet werden.