Warum braucht ein Char Array ein Pointer in einer Klasse und int nicht?!
-
Hey Leute,
ich habe folgendes Verständnis Problem. Ich verstehe nicht so ganz warum ein Char Array einen Pointer braucht und int und bool nicht. Dazu folgenden Code://Mensch.h class Mensch { private: int alter; char name[30]; bool geschlecht; //... public: enum geschlecht = {MANN, FRAU}; void erzeuge(const char* n,int a,bool g); //... }; //Mensch.cpp void Mensch::erzeuge(const char* n,int a,bool g) { strncpy_s(name, n, sizeof(name) - 1); name[sizeof(name)] = '\0'; alter = a; geschlecht = g; } //main.cpp int main() { int main() { Mensch Mann; Mann.erzeuge("Dave", 50, Mensch::MANN); }
Hier geht es rein um das Verständnis, da ich im Moment noch C++ lerne. Das heißt es geht nicht darum, wie man es einfach programmieren könnte oder ähnlichem. Ich danke für eure Hilfe.
DubiTG
-
Arrays haben keine Kopiersemantik, ist eben einfach so. Meistens will man sie auch nicht kopieren (hier aber schon). Haben die Macher von C eben so festgelegt und in C++ hat man das übernommen.
Dir ist klar, dass dein Code falsch ist? Und dass man das in C++ niemals so machen würde? Du schreibst hinter das Ende des Arrays. Statt Arrays würde man in C++ in aller Regel mit std::array arbeiten. Das ist dann auch ganz normal kopierbar. Und für Zeichenketten würde man in C++ kein Array nehmen, sondern std::string. Der ist auch kopierbar und seine Größe ist flexibel. Was du da derzeit machst ist das berüchtigte C mit Klassen. Falls du das so gelernt haben solltest, nimm Abstand von deinem Lehrer.
-
Noch ein krasser fehler: Geschlecht als enum ist ok, es aber als bool zu übergeben nicht. da wird das enum nur als 0 bzw 1 (true) interpretiert.
D.h. MANN und FRAU vertauschen ändert die Bedeutung des Programms!erzeuge() müsste eigentlich ein Konstruktor werden
woher hast Du das?
Z. 28-29 müssen weg