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


  • Mod

    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


Log in to reply