Klasse mit einem const char array?
-
hallo,
ich habe eine kleine klasse die als attribut ein char array haben soll...
dieses char array soll 6 zeichen speichern können und darf nach der initialisierung nicht verändert werden können...also ein const char array...
mein problem ist jetzt folgendes wie kann ich dieses array im konsturktor initialisieren?
und wie kann ich es mit hilfe einer methode zurück geben?
hier mal ein kleine prototype:
class Test { const char myChar[6]; public: Test() :myChar("") { } Test(char *s) :myChar(s) } char[] getMyChar() { return myChar; } }natürlich funktioniert das nicht...
aber mir wird nicht ganz klar wie ich das machen kann...
als string wäre das alles kein problem, aber mit so char arrays komme ich nicht ganz klar...
-
vandread schrieb:
hallo,
dieses char array soll 6 zeichen speichern können und darf nach der initialisierung nicht verändert werden können...Könnte mir vorstellen, daß darin der Fehler liegt.
Die Initialisierung ist doch eigentlich schon eine Veränderung.
-
Wie waers damit?
class Foo { private: const char* const string; public: Foo ( char* ch ) : string(ch) {} const char* get_string() { return string; } }; int main() { Foo f("Hello"); cout << f.get_string() << endl; }Warum denn ohne std::string? Einfach zum testen?
-
@icarus2
ja so ist mir das auch klar mit einem normalen pointer (:
ich habe das aus einer alten klausuraufgabe und dort wird gesagt man soll das ohne die STL machen...
und ich verstehe nicht wie das gehen soll oder ob das überhaupt möglich ist...das problem ist wenn man es so macht wie du, also mit den pointern ist ja nicht die länge von 6 zeichen gewährleistet...
-
In der Initialisierungsliste:
my_char_const_array{ foo, bar, baz }
-
@Kellerautomat
funktioniert bei mir so nicht... :S
-
Was heißt "funktioniert nicht"?
-
class Test { const char myChar[6]; };Ist nicht machbar.
Abhilfe:
-Via Zeiger, wie schon gezeigt.
-Das Array in einer Klasse kapseln und deiner Test-Klasse ein const-Member hinzufügen.
-
vandread schrieb:
hallo,
ich habe eine kleine klasse die als attribut ein char array haben soll...
dieses char array soll 6 zeichen speichern können und darf nach der initialisierung nicht verändert werden können...Selten sinnvolle Anforderungen: In aller Regel hat const bei nicht-statischen Membern nichts verloren, denn dieses impliziert, dass die Konstanz des Members unabhängig von der Konstanz des enthaltenden Objektes besteht. Unmittelbare Konsequenz ist dann u.a., dass das enthaltende Objekte nicht (normal) zuweisbar ist.
Selbst in solchen Fällen, in denen klar ist, dass alle enthaltenden Objekte const sind, bedingt das nicht die Konstanz der nicht-statischen Member unabhängig davon.
Das gleiche Argument kann für nicht-statische Referenz-Member angeführt werden.
Beachtenswerte Ausnahme sind Objekte, die referenzähnliche Semantik implementieren, also z.B. Proxy-Objekte. Hier kann die zusätzliche Benutzung zumindest semantisch begründet werden.vandread schrieb:
also ein const char array...
In C++03 keine mögliche Lösung, da hier nur eine (wenig nützliche) Defaultinitialisierung möglich ist. Der Umweg über die Kapselung in einer Hilfssklasse kann funktionieren.