const unsigned int in Klasse verwenden?
-
Morgen!
Wie kann ich in einer Klasse so etwas deklarieren:
const unsigned int wert = 10;
Weise ich den Wert gleich zu geht es nicht, später per ctor geht es logischerweise auch nicht?!
-
EinfacheFrage schrieb:
später per ctor geht es logischerweise auch nicht?!
Und ob das geht. Stichwort: Initialisierungsliste.
-
In der Klasse kannst du es auch initialisieren, aber nur als static. Das ist jedoch logisch, da du ein und denselben Wert nicht 50mal brauchst.
Geht aber leider nur mit integralen Typen...
-
MFK schrieb:
EinfacheFrage schrieb:
später per ctor geht es logischerweise auch nicht?!
Und ob das geht. Stichwort: Initialisierungsliste.
Die suche liefert nur 2 Einträge und da wird wieder darauf verwiesen das es so etwas gibt... Was ist eine Initialisierungsliste?
-
class myclass { private: const unsigned int wert; public: myclass (unsigned int startWert) : wert(startWert) //<- Initialisierungsliste { //mach was damit } };
-
Optimizer schrieb:
In der Klasse kannst du es auch initialisieren, aber nur als static. Das ist jedoch logisch, da du ein und denselben Wert nicht 50mal brauchst.
Geht aber leider nur mit integralen Typen...Wieso?
das folgendes Program ist nicht korrekt:// h-file class Bla { static const unsigned int k = 10; };
aber wenn Mann initialisiert in einem CPP-file ist es Ok:
// h-file : class Bla { static const unsigned int k; }; // cpp-file: const unsigned int Bla::k = 10;
und dabei, kann Man nicht nur POD-Type sondern auch variablen allen anderen Klassen auf diese Weise initialisiern;
z.B:// cpp-file const BlaSmall BlaBig::k = BlaSma(param1, param2, ... ));
-
itman schrieb:
Optimizer schrieb:
In der Klasse kannst du es auch initialisieren, aber nur als static. Das ist jedoch logisch, da du ein und denselben Wert nicht 50mal brauchst.
Geht aber leider nur mit integralen Typen...Wieso?
das folgendes Program ist nicht korrekt:// h-file class Bla { static const unsigned int k = 10; };
Doch, das sollte IMHO gehen. Bei integralen Typen sollte es gehen. Das hat übrigens auch einen praktischen Grund, nämlich damit du in der Header gleich die Größe eines Arrays mit dieser Konstante angeben kannst. Mir persönlich ist nur unbegreiflich, warum man deswegen keine floats initialisieren darf. Liegt vielleicht am Übersetzungsmodell und dass man nur für ints extra ne Ausnahme eingeführt hat.
-
itman schrieb:
das folgendes Program ist nicht korrekt:
// h-file class Bla { static const unsigned int k = 10; };
Doch, aber der Visual C++ 6.0 versteht es nicht.
-
Optimizer, entschuldigen! Doch, ist es wirklich Korrekt, aber ich hatte auch Problemen mit dieser Initialisierung. Ich dachte das es gcc 3.x war aber jetzt geht es ohne Fehler. Das Fehler kommt nur mit non-integralen Typen. Sogar mit POD-Typen.